我想,Noob范围问题.:\
class ApplicationController < ActionController::Base
protect_from_forgery
@locations = get_locations
def get_locations
Location.where(:active => true).order('name').all
end
end
Run Code Online (Sandbox Code Playgroud)
错误:
undefined local variable or method `get_locations' for ApplicationController:Class
Run Code Online (Sandbox Code Playgroud)
两个问题:1)错误是什么?我是否错误地调用了该方法?2)如何从子类控制器访问此方法?
您在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
Run Code Online (Sandbox Code Playgroud)
locations.html.erb
<% @locations.each do |location| %>
<%= # do something with 'location' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
如果你想在你的内部使用它,application.html.erb你可以简化一些..
ApplicationController的
class ApplicationController < ActionController::Base
protect_from_forgery
def locations
Location.where(:active => true).order('name').all
end
end
Run Code Online (Sandbox Code Playgroud)
application.html.erb
<% locations.each do |location| %>
<%= # do something with location %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
答案归结为逻辑,并且要真正弄清楚您正在寻找什么,可能需要更多细节.
| 归档时间: |
|
| 查看次数: |
8901 次 |
| 最近记录: |