Rails has_many属于同一种形式

时间:2012-10-31 13:54:14

标签: ruby-on-rails has-many belongs-to relationships

所以我有专辑和album_tags。一张专辑可以有很多album_tags,所以我修改了模型:

class Album < ActiveRecord::Base
  ...
  has_many :album_tags
end

class AlbumTag < ActiveRecord::Base
  attr_accessible :album_id, :album_tag_id, :tag_name
  belongs_to :album
end

我还添加了:tag_name到专辑的attr_accessible。 但现在我需要将这些tag_name插入到albums_views

的_form.htl.erb中

我使用嵌套的资源进行了好几次,但这一次有所不同,我的想法没有成功。 在我的新方法中,我添加了

@album_tag = AlbumTag.new

在我的_form.html.erb中,它看起来像这样:

<%= f.label :tag_name %><br />
<%= f.text_field :tag_name %>

日志说:

ActionView::Template::Error (undefined method `tag_name' for #<Album:0xe7331c50>):

所以我尝试在上面添加album_tag对象:

<%= form_for([@user, @album, @album_tag]) do |f| %>

然后我得到:

ActionView::Template::Error (undefined method `user_album_album_tags_path' for #<#<Class:0xe755de48>:0xe755b4cc>):

所以我的玩法是插入一个带有tag1,tag2,tag3等值的form_field。 之后我想把它们拿起来,并将它们插入每个中。 但首先,我必须毫无错误地显示该字段。 我该怎么做?

编辑:我刚刚尝试添加

accepts_nested_attributes_for :album_tags

进入我的albums_model。没有成功

1 个答案:

答案 0 :(得分:1)

这个rails cast很好地覆盖了嵌套表单。

http://railscasts.com/episodes/196-nested-model-form-part-1

和第2部分:

http://railscasts.com/episodes/197-nested-model-form-part-2

从我所看到的,你应该使用。

f.fields_for :album_tags do |builder|