开发者

Guidelines for calling controller methods in helper modules?

Few questions:

  1. Is it possible to call a controller method in a helper module (e.g., application helper)?

  2. If so, how does the helper handle the renderi开发者_如何学Pythonng of views? Ignore it?

  3. In what instances would you want to call a controller method from a helper? Is it bad practice?

  4. Do you have any sample code where you're calling controller methods in helper?


You generally don't call controller-methods from helpers. That is: if you mean a method that collects data and then renders a view (any other method that needs to be called should probably not be in a controller). It is definitely bad practice and breaks MVC.

It is, however, perfectly possible to make controller-methods available in the views, a great example is for instance the current_user method.

To make a controller method available in the views, as a helper method, just do

private

def current_user
  # do something sensible here
  @current_user ||= session[:user] 
end
helper_method :current_user

Such a method is best defined in the private section, or it could be available as an action (if you a wildcard in your routing).


Declare your methods on the corresponding controller

private
def method_name1
...
end

def method_name2
...
end

In the head of the controller declare

helper_method :method_name1, :method_name2

You may want to declare those methods under private state

And that's it, now you can use your method on a helper


Calling a controller from a helper violates the MVC pattern. IMO if you need to call a controller from a Rails view helper (like application_helper) then there is something about the design that could be improved. The intention is that helpers "help" views, and therefore only talk to models.

I'm not going to defend MVC itself here (there are a ton of references on the web), but this SO thread about calling the controller from a view should get you started.

Calling controller from view? (note, this is an ASP.NET thread, so only the high level principles are relevant).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜