我正在使用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
任何人都有任何建议???谢谢!
答案 0 :(得分:11)
这很可能是控制器错误。确保强params接受属性:
params.require(:user).permit(:name, :email, :password, :language1, :language2)
答案 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
它有效。
但为什么......