0

こんな関係だったら、

class Article < ActiveRecord::Base
  has_and_belongs_to_many :topics
end

class Topics < ActiveRecord::Base
  has_and_belongs_to_many :articles
end

トピックの下のテーブルに格納されているトピックの定義済みリストが既にあります。各記事には、3 つのトピックが関連付けられている必要があります。新しい記事を作成した場合、コードはコントローラービューからどのように見えますか? これを作成する最も効率的で正しい方法は何ですか?

4

1 に答える 1

2

フォームに3つのスピナーフィールドを追加し、データとしてトピックIDを、ラベルとしてトピック名を入力します。幸いなことに、あなたのために大部分の重労働を行うフォームヘルパーがいます。詳細については、こちらをご覧くださいcollection_select。そのリンクから抜粋した例を次に示します。

<%= collection_select(:person, :city_id, City.all, :id, :name) %>

コントローラでは、選択したIDに基づいて必要な関連付けを作成できます。次のようになります。

_form.html.erb

<% form_for @article do |f| %>
  ...
  <%= collection_select(:article, :topic_id_1, Topic.all, :id, :name) %>
  <%= collection_select(:article, :topic_id_2, Topic.all, :id, :name) %>
  <%= collection_select(:article, :topic_id_3, Topic.all, :id, :name) %>
  ...
<% end %>

acticle_controller.rb

def create
  ...
  @article.topics << Topic.find params[:topic_id_1]
  @article.topics << Topic.find params[:topic_id_2]
  @article.topics << Topic.find params[:topic_id_3]
  ...
end
于 2012-09-09T03:18:13.297 に答える