你调用类范围内get_locations
,但该方法是一个实例方法,而不是一个类的方法。例如,如果您使用了def self.get_locations
,那么您将提供一个类方法,其中一个类方法可以在类范围内使用(在定义它之后,而不是像以前那样)。
这里的问题是逻辑,这个方法是什么?你打算如何使用@locations
?如果要进入应用程序视图,则应将此方法放入ApplicationHelper
模块中,并从相关操作中调用它。如果你想它在另一个控制器上另外的看法,你想用你的@locations
方法locations
里面,也许你的设置看起来是这样的:
PagesController
class PagesController < ActionController::Base
def locations
@locations = Location.where(:active => true).order('name').all
end
end
位置.html.erb
<% @locations.each do |location| %>
<%= # do something with 'location' %>
<% end %>
如果你想使用这个里面你application.html.erb
可以对mplify它相当一些..
的ApplicationController
class ApplicationController < ActionController::Base
protect_from_forgery
def locations
Location.where(:active => true).order('name').all
end
end
application.html.erb
<% locations.each do |location| %>
<%= # do something with location %>
<% end %>
答案归结为逻辑,和真正找出你寻找什么,更多的细节可能会被要求。
@@位置几乎可以肯定不是你想要的。它是一个真正的类变量,它在Ruby中是在类的所有实例之间共享的,*包括子类*,并且可能会有一些非常奇怪的后果。 – karmajunkie 2010-12-07 21:01:03
Woops,注意到(和编辑)。谢谢。 – markquezada 2010-12-07 21:06:34