2017-03-26 21 views
0
@post.post_tags.build 

上記の投稿はcontorllerです(postタグは投稿とタグの中間のテーブルです)。viewは次のようなものです。 「名前を選ぶ」とポスト正しくショーが、新しい選択ボックスに関連 新しい選択フォームが増えるのはなぜですか?

<div class="form-group"> 
     <%= f.fields_for :post_tags do |pt| %> 
     <%= pt.select :tag_id, @tags.map{|t| [t.name, t.id]}, { :prompt => "choose name", label: "tag" }, class: "tag-fields" %> 
     <% end %> 
    </div> 

私は投稿を編集

、タグも作成されます。私は新しい選択ボックスを望んでいないし、なぜ選択ボックスが作成されたのか分からない。

どのように修正する必要がありますか?

おかげで、 ケン

答えて

0

間接的な関係を利用して参加したモデルに焦点を当てていません。 ActiveRecordによってそれらが作成されます。

あなたが持っているとしましょう:

class Post < ApplicationRecord 
    has_many :tags, through: :taggings 
end 

class Tag < ApplicationRecord 
    has_many :posts, through: :taggings 
end 

class Tagging < ApplicationRecord 
    belongs_to :tag 
    belongs_to :post 
end 

これは私たちがでポストをタグ付けできるようになる:

@post.tags < @tag 

ORでタグを作成:作成したい場合は

@post.tags.create(name: '#yolo') 

選択タグ、またはユーザーがタグを選択できるチェックボックスは、collection helpers

<%= form_for(:post) do |f| %> 
    <%= f.collection_check_boxes :tag_ids, Tag.all, :id, :name %> 
<% end %> 

特別なrelation_name_idsセッターは、ID配列からその場で関連付けを作成/破棄できます。最も良いことは、HABTMまたはhas_many through:を使用すると、Railsがあなたのための参加を処理することです。

+0

'fields_for'は、ネストされたレコードを作成するときに使用されます。コレクションから選択するのではありません。 – max

関連する問題