0

だから私はhas_manyタグ:throughpost_tagsを持つ単純な投稿モデルを持っています。これにより、多対多の関係が可能になります。ただし、form_forとfields_forを機能させることができませんでした。has_many:throughの関係を持つform_forヘルパーにドキュメントが見つからないため、私は本当に行き詰まっています。Railsがキャストするのを見たり、以前のスタックの質問を読んだり、Rails3Wayで調べたりしました。とにかく、これが私が得たものです。

 class Post < ActiveRecord::Base
  belongs_to :blog

  has_many :post_tags, :dependent => :destroy
  has_many :tag, :through => :post_tags, :dependent => :destroy 

  has_many :post_categories, :dependent => :destroy
  has_many :category, :through => :post_categories, :dependent => :destroy 

  attr_accessible(:title, ...)

  accepts_nested_attributes_for :tag, :allow_destroy => true   

end

class PostTag < ActiveRecord::Base
  belongs_to :tag
  belongs_to :post
end

class Tag < ActiveRecord::Base
    has_many :post_tags
    has_many :post, :through => :post_tags
end

私のコントローラーコードは

def new
    @title = "Create a New Post"
    @user = User.find(params[:user_id])
    @blog = @user.blog
    @post = @blog.post.new
    @post.ptype = params[:type]
    3.times { @post.tag.build}
  end

  def create
    @user = User.find(params[:user_id])
    @blog = @user.blog
    @post = @blog.post.new(params[:post])

    if @post.save
        ...
    end
  end

フォームは

<%= form_for([@user,@blog,@post],:url => user_blogs_posts_path, :html => {:multipart=>true}) do |p| %>
    <%= render 'shared/error_messages', :object => p.object %>
    ... 
        <%= p.fields_for :tag do |t|%>
            <%=t.label :tag %>
            <%=t.text_field :tag %>
        <% end %>

        <%=p.submit%>
<% end %>

エラーは

Can't mass-assign protected attributes: tag_attributes
4

1 に答える 1

3

に追加:tag_attributes_attr_accessiblePost

attr_accessible :title, ..., :tag_attributes, ...
于 2012-07-21T03:30:19.670 に答える