我是新手RoR并构建一个新的控制器,我试图从控制器初始化方法中的params哈希获取:id,但是rails回来说它是一种方法...我到处都是读它是一个哈希,为什么NoMethod错误?
无论如何,让我难以理解的主要原因是为什么我无法从initialize方法访问params哈希(或方法或其他任何东西:))?
非常感谢任何帮助...
谢谢:)
class PeopleController < ApplicationController
def initialize
if params[:id] && !params[:id].empty
@person = Person.find(params[:id])
end
end
def index
@people = Person.all
end
def show
@person = Person.find(params[:id])
end
错误的屏幕截图位于:http://img820.imageshack.us/img820/6063/screenshot20110423at221.png
由于
答案 0 :(得分:1)
使用before_filter
获取您要查找的结果:
class PeopleController < ApplicationController
before_filter :find_person
def index
@people = Person.all
end
def show
# @person is already set from the before_filter
# @person = Person.find(params[:id])
end
private
def find_person
if params[:id] && !params[:id].blank?
@person = Person.find(params[:id])
end
end
答案 1 :(得分:0)
因为在创建类时会调用 initialize 。此时,我想象请求尚未处理。如果你先调用super
,它可能会更好,但我不认为Rails应用程序通常使用类初始值设定项。
答案 2 :(得分:0)
尝试使用before_filter
,可能更符合您的要求。
我的评论示例
def foo
{:hello => "world", :foo => "bar"}
end
foo[:hello] # => "world"
foo[:foo] # => "bar"