Đặt các phương thức trợ giúp Ruby cho bộ điều khiển Rails ở đâu?


75

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ử đưa chúng vào /app/helpers/application_helper.rb. Tôi đã sử dụng nó cho các phương pháp được sử dụng trong các khung nhìn. Nhưng bộ điều khiển không thấy những phương pháp đó. Có nơi nào khác mà tôi nên đặt chúng hay tôi có cần truy cập các phương thức trợ giúp đó theo cách khác không?

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

Câu trả lời:


76

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


27
Anh ta cũng sẽ phải thêm helper_method :my_helper_methodvào ApplicationControllerđể cung cấp chúng cho các lượt xem.
David

2
Điều này sẽ không dẫn đến một bộ điều khiển chất béo theo thời gian?
bgcode

1
cũng
@David

67

Đối với Rails 4 trở đi, mối quan tâm là con đường để đi. Có một bài báo tốt vẫn có thể được xem qua Wayback Machine.

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

module EventsHelper
  def do_something
  end
end

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

class BadgeController < ApplicationController
  include EventsHelper

  ...
end

2
Tôi thấy đây là giải pháp tốt nhất khi bạn không cần các phương thức trợ giúp có trong tất cả các bộ điều khiển của mình. Giải pháp này cũng áp dụng cho các mô hình.
Dennis

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

Bạn có biết nếu chúng tôi cần sử dụng extend ActiveSupport::Concernvới những lo ngại về bộ điều khiển?
Marklar

Không cần phải mở rộng ActiveSupport :: Mối quan tâm bên trong thư mục điều khiển / mối quan tâm. Bạn chỉ cần xác định các mô-đun ở trên thư mục và có thể chỉ cần bao gồm như đã đề cập ở trên (cho rails 4.2 và rails 5).
Ravindra M

có lẽ là câu trả lời hay nhất
Anton Semenichenko

29

bạn nên xác định các phương thức bên trong bộ điều khiển ứng dụng, nếu bạn có ít phương pháp thì 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 tệp trợ giúp như sau

class YourController < ApplicationController
  include OneHelper
  include TwoHelper
end

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

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

19

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

8

Ryan Bigg phản hồi là tốt.

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

class YourController < ApplicationController
  include OneHelper
  include TwoHelper
 end

Trân trọng!


0

Bao gồm người trợ giúp trong bộ điều khiển sẽ kết thúc việc hiển thị các phương thức của trình trợ giúp dưới dạng hành động!

# With new rails (>= 5) 

helpers.my_helper_method


# For console

helper.my_helper_method
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.