50

Tôi có một số phương thức Ruby nhất định (hoặc tất cả) bộ điều khiển cần. Tôi đã thử đặt chúng trong /app/helpers/application_helper.rb. Tôi đã sử dụng nó cho các phương thức được sử dụng trong các khung nhìn. Nhưng bộ điều khiển không nhìn thấy những phương pháp đó. Có nơi nào khác tôi nên đặt chúng hay tôi cần truy cập các phương thức trợ giúp khác nhau?Nơi đặt các phương thức trợ giúp Ruby cho bộ điều khiển Rails?

Sử dụng Rails ổn định mới nhất.

Trả lời

61

Bạn nên xác định phương thức bên trong ApplicationController.

+20

Ông cũng sẽ có thêm 'helper_method: my_helper_method' trong 'ApplicationController' để làm cho họ sẵn sàng cho lượt xem. – David

+0

Ngoài ra tốt đẹp @JohnnyGrass –

+1

sẽ không dẫn đến bộ điều khiển chất béo theo thời gian? – babonk

7

Phản hồi của Ryan Bigg rất tốt.

giải pháp khả thi khác là thêm người giúp đỡ để điều khiển của bạn:

class YourController < ApplicationController 
    include OneHelper 
    include TwoHelper 
end 

Trân trọng!

13

Bạn có thể gọi bất kỳ phương thức trợ giúp nào từ bộ điều khiển bằng cách sử dụng view_context, ví dụ:

view_context.my_helper_method 
25

bạn nên xác định phương pháp trong điều khiển ứng dụng, nếu bạn có vài phương pháp sau đó bạn có thể làm như sau

class ApplicationController < ActionController::Base  
    helper_method :first_method 
    helper_method :second_method 

    def first_method 
    ... #your code 
    end 

    def second_method 
    ... #your code 
    end 
end 

Bạn cũng có thể bao gồm các file helper như sau

class YourController < ApplicationController 
    include OneHelper 
    include TwoHelper 
end 
+0

có cách nào gán tất cả helper_methods trên một dòng không? –

+0

@HarshaMV Tôi nghĩ bạn có thể tiếp tục như 'helper_method: first_method,: second_method'. –

40

Đối với Rails 4 trở đi, mối quan tâm là con đường để đi. Có một bài viết phong nha ở đây http://richonrails.com/articles/rails-4-code-concerns-in-active-record-models

Về bản chất, nếu bạn nhìn vào thư mục bộ điều khiển, bạn sẽ thấy một thư mục con quan tâm. Tạo một module trong đó dọc theo những dòng

module EventsHelper 
    def do_something 
    end 
end 

Sau đó, trong bộ điều khiển chỉ bao gồm nó

class BadgeController < ApplicationController 
    include EventsHelper 

    ... 
end 
+0

Tôi thấy đây là giải pháp tuyệt vời nhất khi bạn không cần các phương pháp trợ giúp được bao gồm trong tất cả các bộ điều khiển của bạn. Giải pháp này cũng áp dụng cho các mô hình. – Dennis

+0

Đẹp. Cảm ơn bạn :) – tonyedwardspz

+0

Bạn có biết chúng ta có cần sử dụng 'extend ActiveSupport :: Concern' với các vấn đề về điều khiển không? – Marklar