Rails选择器给出未定义的方法错误

时间:2014-11-08 18:32:43

标签: ruby-on-rails

我有一行代码:

f.select(:birth_day, options_for_select((1..31)), {:include_blank => false }, {:id =>     'select1'})

然而,当我运行我网站的相关部分时,它会给出

的未定义方法`birth_day'

有谁知道为什么会这样? birth_day显然不是一种方法,而是select标签提交的参数的名称。

非常感谢任何帮助

2 个答案:

答案 0 :(得分:1)

此表单与之关联的模型没有名为birth_day的方法(两个字段)。

您可能希望将birth_day字段添加到模型中 - 或者将attr_accessor :birth_day添加到此模型中(请注意,此字段不会保存在数据库中 - 但您可以执行某些操作它在回调中。)

答案 1 :(得分:1)

select_tagf.select是完全不同的方法,它们并不相同。拥有select_tag你可以声明你想要的任何东西,例如:

form_tag '/some_path' do 
  select_tag :birth_day, options_for_select((1..31))
end

请记住,select_tag :birth_day表示它与任何对象都没有关联(因此birth_day可以在控制器中作为params[:birth_day])访问,但同样,它与任何对象都没有关联。

另一方面,f.select强制您使用form_for,例如:

form_for @user do |f|
  f.select :birth_day, options_for_select((1..31))
end

此类表单定义强制@user必须具有birth_day字段,可以声明为attr_accessor :birth_day,也可以在数据库中指定。