2011-08-14 28 views
9

Tôi có một đoạn mã cần thiết trong 2 bộ điều khiển của tôi, nhưng không phải tất cả chúng. Phương pháp này thuộc về đâu? Tôi đã đọc về những người giúp đỡ, nhưng những người đó dường như là cho mã liên quan đến xem. Ai đó đã đề xuất thư mục lib, nhưng điều đó có vẻ 'quá xa' từ logic điều khiển, tôi không cần nó trong quan điểm hoặc mô hình. Có ai đó gặp phải vấn đề đó không?đường ray 3 - mã được chia sẻ giữa nhiều bộ điều khiển - nơi đặt nó?

Trả lời

11

Có ba tùy chọn, dễ nhất (mặc dù, ô uế nhất) là bộ điều khiển ứng dụng. Hai tùy chọn còn lại là bộ điều khiển chung được chia sẻ

class FooController < FooBarParentController 
    # code here 
end 

class BarController < FooBarParentController 
    # code here 
end 

Cách sử dụng tùy thuộc vào mức độ liên quan của các bộ điều khiển này.

Giải pháp cuối cùng là một mô-đun

module FooBarModule 
    extend ActiveSupport::Concern 

    included do 
    # class level code 
    # before_filter .... 
    end 

    module ClassMethods 
    # all class methods here 
    end 

    # instance methods here 
end 

Đây là nơi chia sẻ các mã cần thiết dành cho một số ít các bộ điều khiển ad-hoc, hoặc nếu bạn đã sử dụng thừa kế trên và mã này không hoàn toàn phù hợp với tập hợp con này (do đó cố gắng mô phỏng đa thừa kế).

+0

cảm ơn câu trả lời hữu ích này! giải pháp cuối cùng có vẻ với tôi linh hoạt nhất, vì vậy tôi nghĩ rằng tôi sẽ cố gắng này. bạn có thể giải thích một chút nơi tôi nên đặt mã này (trong một mô-đun trong thư mục lib?) – user573335

+0

Cá nhân tôi đặt nó trong thư mục bộ điều khiển. –

+0

Nếu nó liên quan cụ thể đến ứng dụng này, hãy đặt nó dưới thư mục ứng dụng (có thể trong thư mục con 'mô-đun'). Thư mục lib là nhiều hơn cho các tiện ích mục đích chung mà không phải là ứng dụng cụ thể. –

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