2009-11-12 54 views
0

如果我有一個像下面的例子如何訪問視圖中的活動記錄關聯?

class Person < ActiveRecord::Base 
    has_many :moods 
end 

class Mood <ActiveRecord::Base 
end 

模型我怎麼改變new.html.erb讓我選擇一種情緒進入一個新的人的時候?我是否需要手動將外鍵添加到mysql?

回答

4

如果你想要一個選擇菜單,你正在尋找幫助器collection_select

退房Formtastic,它可以爲你生成一個很好的選擇菜單爲你的has_many。

1

Rails遷移不會自動創建外鍵。無論是約束有類似如下的命令遷移過程中添加:

execute "alter table moods add constraint fk_moods_persons foreign key (person_id) references persons(id)" 

有插件,它可以自動完成這個工作,使工作更簡單。一些比較流行的是:

  1. Foreigner
  2. 紅山On Rails的核心[www.railslodge.com/plugins/389-redhill-on-rails-core]

和顯示在視圖,可以使用collection_select助手。

我想habtm會是一個更好的關聯(如果不止一個人可以有相同的心情)或has_many:through更好。

1

從你給出的一些細節中,有點難以猜測,你試圖去做什麼。但我會盡量嘗試:

當你想一個人在某一時刻正好一個的心情,我會像這個模型:

class Person < ActiveRecord::Base 
    belongs_to :mood 
end 

class Mood < ActiveRecord::Base 
    has_many :people 
end 

遷移在創建表的人然後數據庫應包括以下語句來創建一個外鍵:

def self.up 
    create_table :people do |t| 
    ... 
    t.references :mood 
    ... 
    end 
end 

如果這是你想要的,你可以使用collection_select命令flyfishr64指出。

form_for標籤裏面new.html.erb你會寫是這樣的:

<% form_for @person do |f| %> 
... 
<%= f.collection_select :mood_id, Mood.all, :id, :mood_name, :include_blank => "--- Choose your mood ---" %> 
... 
<% end %> 

希望幫助!

但是,當你真的想讓你的人同時擁有多種心情時,這會稍微複雜一些,我可能會建議在兩種模式中都使用has_and_belongs_to_many association

如果是這樣的話,我會推薦觀看這個Railscast插曲:HABTM Checkboxes。 (對不起,你必須自己尋找鏈接,因爲我不允許發佈多於一行。轉到railscast.com並查看第17集。)