【问题标题】:nested attributes in simple_form returns mass assignment errorsimple_form 中的嵌套属性返回批量分配错误
【发布时间】:2011-05-05 03:00:00
【问题描述】:

型号:

class Topic < ActiveRecord::Base
  has_many        :posts, :dependent => :destroy
  validates       :name, :presence => true,
                  :length => { :maximum => 32 }
  attr_accessible :name, :post_id
end

class Post < ActiveRecord::Base
  belongs_to :topic,    :touch => true
  has_many   :comments, :dependent => :destroy
  accepts_nested_attributes_for :topic
  attr_accessible :name, :title, :content, :topic, :topic_attributes
end

查看:

<%= simple_form_for :post, :url => { :controller => :posts, :action => "create" } do |f| %>
  <h1>Create a Post</h1>
  <%= f.input :name, :label => false, :placeholder => "Name" %>
  <%= f.input :title, :label => false, :placeholder => "Title" %>
  <%= f.input :content, :label => false, :placeholder => "Content", :as => :text %>
  <%= f.simple_fields_for :topic do |topic_form| %>
    <%= topic_form.input :name, :label => false, :placeholder => "Topic" %>
  <% end %>
  <%= f.button :submit, "Post" %>  
<% end %>

控制器:

def create
  topic_name = params[:post].delete(:topic)
  @topic = Topic.find_or_create_by_name(topic_name)
  @post = Post.new(params[:post])
  @post.topic = @topic
  respond_to do |format|
    if @post.save
      format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
    else
      format.html { render :action => "new" }
    end
  end
end

当我填写并提交 /posts/new 表单时,终端会显示:

Started POST "/posts" for 127.0.0.1 at 2011-05-06 18:30:10 -0700
  Processing by PostsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Gg2T18NRiYMe5UMReSfvwwiDTQSrjdnjiEdyDcP1MuI=", "post"=>{"name"=>"25", "title"=>"25", "content"=>"25", "topic"=>{"name"=>"25"}}, "commit"=>"Post"}
  Topic Load (0.2ms)  SELECT "topics".* FROM "topics" WHERE "topics"."name" = '25' LIMIT 1
  AREL (0.9ms)  INSERT INTO "topics" ("name", "created_at", "updated_at") VALUES ('25', '2011-05-07 01:30:10.237406', '2011-05-07 01:30:10.237406')
  Topic Load (0.7ms)  SELECT "topics".* FROM "topics" ORDER BY updated_at DESC
  AREL (0.8ms)  INSERT INTO "posts" ("name", "title", "content", "topic_id", "created_at", "updated_at") VALUES ('25', '25', '25', 25, '2011-05-07 01:30:10.406437', '2011-05-07 01:30:10.406437')
  AREL (0.3ms)  UPDATE "topics" SET "updated_at" = '2011-05-07 01:30:10.415141' WHERE "topics"."id" = 25
Redirected to http://0.0.0.0:3000/posts/25
Completed 302 Found in 281ms

我尝试在主题模型中将:post_attributes 添加到attr_accessible,但这并不能解决问题。会不会是表格?

【问题讨论】:

  • 我根据@monocle 和@rafaelfranca 的建议更新了代码但是我仍然收到同样的错误。进行这些更改后,我确实重新启动了我的服务器,以防万一有人问。感谢您的帮助,非常感谢。

标签: ruby-on-rails ruby nested-attributes simple-form mass-assignment


【解决方案1】:

您不应该将 simple_fields_for 用于 :topic 吗?

simple_form_for @post do |f|
  f.simple_fields_for :topic do |topic_form|
    topic_form.input :name
  end
end

【讨论】:

    【解决方案2】:

    这不是 simple_form 中的错误。您应该将 post_id 添加到主题模型中可访问的属性。此代码在控制台中也会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      相关资源
      最近更新 更多