Rails 4形成选择输入,当它们不为空时,给出“不能为空”错误

时间:2014-03-09 19:41:31

标签: ruby-on-rails forms ruby-on-rails-4

我正在使用Rails 4,并且在我的注册表单中有两个select输入。当我做出选择并填写表单的其余部分时,我得到两个与这些输入相关的错误,表示它们不能为空。如果不是空白,我不知道为什么我会收到这些错误...

以下是我正在使用的相关宝石:

的Gemfile

gem 'bootstrap_form'
gem 'twitter_cldr'

以下是我正在使用的字段的部分内容:

应用/视图/用户/ _fields.html.erb

<%= render 'shared/error_messages', object: f.object %>

<%= f.text_field :name, hide_label: true, placeholder: 'name' %>
<%= f.text_field :email, hide_label: true, placeholder: 'email' %>
<%= f.select :language1, TwitterCldr::Shared::Languages.all.values %>
<%= f.select :language2, TwitterCldr::Shared::Languages.all.values %>
<%= f.password_field :password, hide_label: true, placeholder: 'password' %>
<%= f.password_field :password_confirmation, hide_label: true, placeholder: 'confirm password' %>

users表的列定义如下:

分贝/ schema.rb

...
create_table "users", force: true do |t|
...
    t.string "language1"
    t.string "language2"
...
end

以下是我的用户模型中的验证:

应用/模型/ user.rb

validates :language1, presence: true
validates :language2, presence: true

我的想法:

我在想的是,在下拉列表中选择的内容可能不是字符串? 或者我已经看到,在某些情况下,您必须在select方法中指定表单所针对的对象,如下所示:

<%= f.select :user, :language1, TwitterCldr::Shared::Languages.all.values %>

但我对这种方法的问题是这些字段是部分的,对象是作为本地传入的,所以当我这样做时:

<%= f.select f.object, :language1, TwitterCldr::Shared::Languages.all.values %>

我的User

类的未定义方法'to_sym'出错了

任何人都有任何建议???谢谢!

2 个答案:

答案 0 :(得分:11)

这很可能是控制器错误。确保强params接受属性:

params.require(:user).permit(:name, :email, :password, :language1, :language2)

Look at strong params

答案 1 :(得分:0)

我也有同样的问题。最初,我天真地把

def create

@micropost = user.microposts.create(params[:microposts])

当我把

 @micropost = user.microposts.create(micropost_params), 

private
def micropost_params
     params.require(:micropost).permit(:content, :user_id)
end

它有效。

但为什么......