我想定义一个辅助方法my_method
,它可以在BuyersController
方法中使用(例如index
,create
,e.t.c。)。
我尝试在app/helpers/application_helper.rb
中定义它,但它不起作用:
undefined method `my_method' for #<BuyersController:0x26df468>
它应该在某个共享位置,因为我也希望在其他控制器中使用它。这就是我尝试app/helpers/application_helper.rb
。
定义它的正确位置是什么?
答案 0 :(得分:14)
应该在app/controllers/application_controller.rb
app/helpers/application_helper.rb
用于共享视图帮助程序。
答案 1 :(得分:2)
您应该在应用程序控制器中包含应用程序帮助程序模块,以便在请求期间其所有方法(所有控制器和视图)都可用。
class ApplicationController < ActionController::Base
helper ApplicationHelper
…
end
请参阅helper方法
的API文档答案 2 :(得分:2)
从Rails 3开始,您也可以在控制器内调用view_context.my_method
答案 3 :(得分:2)
展开accepted answer,如果 希望与视图共享控制器方法,helper_method
似乎非常适合这种情况。在控制器中声明helper_method
使视图可以访问。
class ApplicationController < ActionController::Base
helper_method :current_user, :logged_in?
def current_user
@current_user ||= User.find_by(id: session[:user])
end
def logged_in?
current_user != nil
end
end
答案 4 :(得分:0)
在rails 4之前,具有相同控制器名称的辅助对象仅在其控制器和视图中可用。从rails 4开始,所有助手都可用于所有控制器(如果包含)和视图。话虽如此,所有助手将在您的视图中共享。
注意:如果您不希望特定控制器使用此行为,则可以使用clear_helpers
,它将仅包含具有相同控制器名称的帮助程序。
有关使用助手的更多信息,请参见this