Ruby on rails 简单形式的嵌套属性返回质量分配错误
型号: 当我填写并提交/posts/新表格时,终端显示:Ruby on rails 简单形式的嵌套属性返回质量分配错误,ruby-on-rails,ruby,nested-attributes,simple-form,mass-assignment,Ruby On Rails,Ruby,Nested Attributes,Simple Form,Mass Assignment,型号: 当我填写并提交/posts/新表格时,终端显示: 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.h
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
我尝试将
:post_属性
添加到主题模型中的attr_accessible
,但这并不能解决问题。可能是表单吗?您不应该使用简单字段作为:主题吗
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_id添加到主题模型中可访问的属性中。该代码在控制台中也会失败。我根据@monocle和@rafaelfranca的建议更新了代码,但仍然收到相同的错误。在做了这些更改之后,我确实重新启动了服务器,以防有人问我。谢谢你的帮助,我非常感激。
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
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
simple_form_for @post do |f|
f.simple_fields_for :topic do |topic_form|
topic_form.input :name
end
end