2009-07-24 30 views
8

Tôi muốn chia sẻ mã không liên quan đến quan điểm giữa một số bộ điều khiển trong ứng dụng Rails của tôi. Tôi nên đặt nó ở đâu trong cấu trúc thư mục?Nơi đặt mã Rails không phải là mô hình, chế độ xem, bộ điều khiển hoặc trình trợ giúp?

EDIT: mã trong câu hỏi nếu điều mà tất cả các bộ điều khiển sử dụng để xác định cách họ làm cho dữ liệu mô hình

+0

nó không liên quan đến các thực thể cơ sở dữ liệu, hoặc (không phải mã mô hình) –

+1

Mô hình không cần phải liên quan đến cơ sở dữ liệu. Họ chỉ đại diện cho dữ liệu được sử dụng bởi hệ thống, bất kể nó được lưu trữ hay không. – Pesto

+0

Nó là gì? Bạn chỉ tuyên bố những gì nó không phải là, nhưng không phải là những gì nó được. – txwikinger

Trả lời

8

Nếu mã là một cái gì đó giống như mô-đun với phương pháp hữu ích trong những có thể được đặt trong thư mục lib. Hoặc bạn có thể tạo một siêu lớp chung cho một số bộ điều khiển của bạn nếu chúng chia sẻ hành vi.

Vui lòng đăng ví dụ về loại mã bạn đang nghĩ tới.

0

Cá nhân tôi nghĩ rằng nó tốt, nếu bộ điều khiển của nó liên quan đến đặt nó trong thư mục bộ điều khiển của bạn, nhưng, được gắn nhãn là một mô-đun, ví dụ: app/controllers/what_am_i_module.rb vì nó dành riêng cho ứng dụng đang phát triển.

lib có vẻ giống như một nơi với tôi, nơi tôi sẽ đặt các cải tiến khung/lõi hoặc các bản vá lỗi khỉ không cụ thể cho ứng dụng.

5

Nếu đó là "một cái gì đó tất cả các bộ điều khiển sử dụng", tôi sẽ đặt nó trong một lớp cơ sở được sử dụng bởi tất cả các bộ điều khiển. "Application_controller" xuất hiện trong đầu bạn.

+0

+1 Âm thanh như application_controller.rb cho tôi. – cakeforcerberus

2

Tôi đã tạo mô-đun trong lib để cung cấp mã cho các lớp khác.

Đây là mô-đun mẫu viết tắt xác định giá trị cho các chế độ xem có thể được khởi tạo từ các bộ điều khiển khác nhau.

module ControllerDefaultValues 
    def default_value_for_some_controller() 
    @controller_name = "some_controller" 
    end 
end 

Để sử dụng, đơn giản bao gồm các module trong lớp học của bạn:

class SearchesController 
    include ControllerDefaultValues 
    # 
    def search_some_controller 
    default_value_for_some_controller() 
    render(:partial => "search_results") 
    end 
end 

Lợi ích chính của phương pháp này là nó giữ thư mục điều khiển của bạn tập trung vào việc điều khiển và thư mục mô hình của bạn tập trung vào logic.

0

Nếu nó sẽ được sử dụng bởi tất cả các bộ điều khiển của bạn, dính vào nó trong application_controller.rb

Tất cả các bộ điều khiển của bạn kế thừa từ ApplicationController, vì vậy tất cả họ sẽ có quyền truy cập đối với họ.

Các vấn đề liên quan