如果我有一個像下面的例子如何訪問視圖中的活動記錄關聯?
class Person < ActiveRecord::Base
has_many :moods
end
class Mood <ActiveRecord::Base
end
模型我怎麼改變new.html.erb讓我選擇一種情緒進入一個新的人的時候?我是否需要手動將外鍵添加到mysql?
如果我有一個像下面的例子如何訪問視圖中的活動記錄關聯?
class Person < ActiveRecord::Base
has_many :moods
end
class Mood <ActiveRecord::Base
end
模型我怎麼改變new.html.erb讓我選擇一種情緒進入一個新的人的時候?我是否需要手動將外鍵添加到mysql?
如果你想要一個選擇菜單,你正在尋找幫助器collection_select。
退房Formtastic,它可以爲你生成一個很好的選擇菜單爲你的has_many。
Rails遷移不會自動創建外鍵。無論是約束有類似如下的命令遷移過程中添加:
execute "alter table moods add constraint fk_moods_persons foreign key (person_id) references persons(id)"
有插件,它可以自動完成這個工作,使工作更簡單。一些比較流行的是:
和顯示在視圖,可以使用collection_select助手。
我想habtm會是一個更好的關聯(如果不止一個人可以有相同的心情)或has_many:through更好。
從你給出的一些細節中,有點難以猜測,你試圖去做什麼。但我會盡量嘗試:
當你想一個人在某一時刻正好一個的心情,我會像這個模型:
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集。)