2011-01-05 40 views
10

Nếu tôi muốn có các chức năng được gọi bên trong bộ điều khiển, tôi nên đặt chúng ở đâu?Rails 3: Chức năng gọi bên trong bộ điều khiển

+0

Vui lòng cung cấp thêm thông tin, bạn có muốn nó có sẵn cho tất cả các bộ điều khiển không? – ddayan

+0

Loại chức năng nào? – jonnii

+0

@ddayan, có cho tất cả các bộ điều khiển nhưng tôi rất vui khi biết cách giới hạn cho một bộ điều khiển. Ví dụ: – donald

Trả lời

14

nếu bạn muốn nó là cục bộ cho bộ điều khiển thì tất cả những gì bạn cần làm là thêm nó vào bộ điều khiển bạn muốn sử dụng.

private 
def myfunction 
    function code..... 
end 

cho tất cả bộ điều khiển bạn có thể đặt bên trong bộ điều khiển ứng dụng, vì tất cả các trình điều khiển đều được phân loại phụ.

ApplicationController

protected 

def myfunction 

    function code..... 

end 

Nếu bạn muốn truy cập vào quan điểm của bạn thì bạn có thể tạo ra một helper

ApplicationHelper

def myfunction 

    function code... 

end 
+2

Tôi tin rằng ví dụ 'ApplicationController' nên được bảo vệ, chứ không phải riêng tư. – jrdioko

+0

đúng. Quên thay đổi nó khi tôi sao chép và dán nó từ ví dụ đầu tiên. cảm ơn vì đã phát hiện ra nó. – ddayan

+0

thực sự hữu ích một ... – useranon

3
class YourController < ActionController::Base 

    def your_action 
    your_function 
    end 

    private 

    def your_function 

    end 
end 

Ngoài ra nhìn vào before_filterafter_filter, họ thường hữu ích bằng hiện vật như điều

0

Các ApplicationController là ở đây cho rằng, vì mỗi điều khiển thừa hưởng từ nó.

4

@jonnii, ví dụ, tôi muốn gọi một hàm trả về mã duy nhất được tạo.

Nếu mã được tạo của bạn sẽ chỉ được sử dụng trên của bạn điều khiển, đặt các chức năng bên trong một bộ điều khiển, như chức năng bảo vệ (cách dễ nhất sẽ được đặt nó bên ApplicationController).

Nếu bạn cần gọi hàm trên lượt xem, sau đó đặt nó trên trình trợ giúp, như ddayan nói.

Nếu bạn cũng cần gọi hàm từ mô hình, thì cách đơn giản nhất để làm điều đó là đặt một mô-đun bên trong thư mục/lib /.

# /lib/my_module.rb 
module MyModule 
    def generate_code 
    1 
    end 
end 

Bạn cũng sẽ cần phải bao gồm nó với một initializer:

#/config/initializers/my_module.rb 
require 'my_module' 

Từ thời điểm đó trở đi, bạn có thể sử dụng chức năng như thế này:

MyModule::generate_code 

Nếu bạn đang làm điều này rất thường xuyên, hãy xem xét việc tạo ra một viên ngọc.

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