我有一行代码:
f.select(:birth_day, options_for_select((1..31)), {:include_blank => false }, {:id => 'select1'})
然而,当我运行我网站的相关部分时,它会给出
#
的未定义方法`birth_day'有谁知道为什么会这样? birth_day显然不是一种方法,而是select标签提交的参数的名称。
非常感谢任何帮助
答案 0 :(得分:1)
此表单与之关联的模型没有名为birth_day
的方法(两个字段)。
您可能希望将birth_day
字段添加到模型中 - 或者将attr_accessor :birth_day
添加到此模型中(请注意,此字段不会保存在数据库中 - 但您可以执行某些操作它在回调中。)
答案 1 :(得分:1)
select_tag
和f.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
,也可以在数据库中指定。