我的Topic
有很多Post
个。创建主题时,它会随之创建第一个帖子。
我在表单中包含了帖子字段:
= form_for @topic do |topic_form|
# ...
= topic_form.fields_for @post do |post_fields|
= post_fields.label :content
%br/
= post_fields.text_area :content
%br/
这是TopicsController
的样子:
def new
@topic = Topic.new
@post = Post.new
respond_with @topic
end
def create
@topic = Topic.create params[:topic]
@post = @topic.create_post params[:topic][:post]
respond_with @topic, location: topic_url(@topic)
end
我在UnknownAttributeError - unknown attribute: post
方法的第一行得到create
。我猜是因为post hash包含在请求中的主题哈希中:
"topic" => { "title" => "...", "post" => { "content" => "..." } }
我如何解决这种情况?
答案 0 :(得分:4)
Topic
模型中应包含accepts_nested_attributes_for :posts
。= topic_form.fields_for :posts do |post_fields|
而不是@post
。new
和create
方法都不需要@post = ....
行。保存@topic
后,它会自动为您保存新的关联帖子。以下是对表单中嵌套属性的一个很好的解释:http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes