【问题标题】:Rails 4 form select inputs giving "can't be blank" error when they aren't blankRails 4表单选择输入在非空白时给出“不能为空白”错误
【发布时间】:2014-03-09 19:41:31
【问题描述】:

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

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

宝石文件

gem 'bootstrap_form'
gem 'twitter_cldr'

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

app/views/users/_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表的列定义如下:

db/schema.rb

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

这是我的用户模型中的验证:

app/models/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”的错误

有人有什么建议吗???谢谢!

【问题讨论】:

  • 您能否检查您的开发日志或添加调试语句以查看params[:language1]params[:language2] 在提交表单后到达您的控制器后的值是多少?

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


【解决方案1】:

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

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

Look at strong params

【讨论】:

  • 另外,你能为我以及其他想要使用它的人修复你的链接吗?
【解决方案2】:

我也有同样的问题。一开始,我天真地把

定义创建

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

当我把

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

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

它有效。

但是为什么....

【讨论】:

    猜你喜欢
    • 2012-01-03
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多