表单中“有很多”关联的记录字段

时间:2011-01-29 06:00:48

标签: ruby-on-rails forms associations has-many

我的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" => "..." } }

我如何解决这种情况?

1 个答案:

答案 0 :(得分:4)

  1. 您的Topic模型中应包含accepts_nested_attributes_for :posts
  2. 您的表单应该= topic_form.fields_for :posts do |post_fields|而不是@post
  3. 您的newcreate方法都不需要@post = ....行。保存@topic后,它会自动为您保存新的关联帖子。
  4. 以下是对表单中嵌套属性的一个很好的解释:http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes