simple_form中的嵌套属性返回质量分配错误

楷模:

class Topic  :destroy validates :name, :presence => true, :length => { :maximum => 32 } attr_accessible :name, :post_id end class Post  true has_many :comments, :dependent => :destroy accepts_nested_attributes_for :topic attr_accessible :name, :title, :content, :topic, :topic_attributes end 

视图:

  { :controller => :posts, :action => "create" } do |f| %> 

Create a Post

false, :placeholder => "Name" %> false, :placeholder => "Title" %> false, :placeholder => "Content", :as => :text %> false, :placeholder => "Topic" %>

控制器:

 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 

我尝试在Topic模型中添加:post_attributesattr_accessible ,但这并没有解决它。 这可能是表格吗?

你不应该使用simple_fields_for:topic?

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

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