【问题标题】:Rails form_for not accepting parameters for newly migrated columnsRails form_for 不接受新迁移列的参数
【发布时间】:2014-03-30 00:07:48
【问题描述】:

我刚刚将列 soundcloud_urlimage_url 迁移到我的 posts 表中。我正在尝试在 _form.html.erb 中添加 soundcloud_url 和 image_url 作为字段(以提交和创建新帖子),但每次我尝试提交时,我都被告知 soundcloud_url 和 image_url 不能为空。但他们不是,我在这里做错了什么?

post.rb

    class Post < ActiveRecord::Base
      validates_presence_of :body, :title, :soundcloud_url, :image_url
    end

_form.html.erb

      <div class="field">
       <%= f.label :title %><br>
       <%= f.text_field :title, :size => "80" %>
      </div>
     <div class="field">
       <%= f.label :body %><br>
       <%= f.text_area :body, :rows => 10, :cols => 50 %>
     </div>
     <div class="field">
       <%= f.label :image_url %><br>
       <%= f.text_area :image_url, :rows =>"2", :cols => "50" %>
     </div>
     <div class="field">
       <%= f.label :soundcloud_url %><br>
       <%= f.text_area :soundcloud_url, :rows =>"2", :cols => "50" %>
     </div>       

【问题讨论】:

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


    【解决方案1】:

    我认为您忘记将这两个属性添加到您的强参数中,如果是这样,您的posts controller 中应该有以下内容:

    def post_params
        params.require(:post).permit(:soundcloud_url, :image_url, ......)
    end
    

    如果你不知道什么是强参数,你可以看到这个post,我们使用强参数本质上是为了防止恶意用户将值分配给不允许的属性,所以你应该指定你希望用户的确切列通过表单更新,如果你没有将:soundcloud_url:image_url 设置为允许的参数,Rails 将拒绝接受它们的值,这意味着你的模型找不到 soundcloud_url 和 image_url 的值,结果告诉你它们不能为空。

    希望有帮助

    【讨论】:

    • 这应该在哪里?
    • 在控制器中。 strong parameters.
    • 如果您使用的是 Rails 4,那么答案是肯定的,在您的控制器中,我会更新答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2011-06-24
    • 2016-02-22
    • 1970-01-01
    • 2014-12-25
    • 2016-07-18
    相关资源
    最近更新 更多