2012-09-09 77 views
0

如果我有這樣的關係,has_and_belongs_to_many HABTM領域

class Article < ActiveRecord::Base 
    has_and_belongs_to_many :topics 
end 

class Topics < ActiveRecord::Base 
    has_and_belongs_to_many :articles 
end 

我有存儲在表中的主題下主題已經預先定義的列表。每個文章必須有3個主題與之相關聯。如果我創建一篇新文章,代碼怎麼會看起來與控制器視圖?什麼是最有效和正確的方式來創建這個?

回答

2

將三個微調器字段添加到您的表單中,並使用主題標識符作爲數據和主題名稱作爲標籤填充它們。幸運的是,有幫助你完成大部分重任的人。 See here有關collection_select的詳細信息。下面是該鏈接取一個例子:

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

在你的控制器,你可以創建基於選擇的IDS必要的關聯。它應該是這個樣子:

_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