2013-10-16 28 views
1

無法理解Rails與模型的關聯如何工作。下面是簡單的問題:Rails與模型和遷移的關聯

有兩個表

產品

id| name | status 
1 | Tube | 0 
2 | Pillar | 1 
3 | Book | 0 
4 | Gum  | 1 
5 | Tumbler | 2 

狀態

status | name 
0  | Unavailable 
1  | In stock 
2  | Discounted 

隨着〜的模型和控制器相同的名稱。

我不會在每個新產品的狀態表中創建新行。我想在erb中顯示狀態名稱。我應該在模型和遷移文件中寫什麼(例如哪些belongs_to,has_one或has_many ...)?

回答

0

產品應該belongs_to :status和狀態應該has_many :products爲一個簡單的一對多關聯,並且您不需要設置產品的狀態。在erb中,你會使用<%= @product.status.name %>。要設置這些遷移,所有的create_table :products do |t| t.string :name; t.integer :status_id; endcreate_table :statuses do |t| t.string :name; end

0

首先用於按照Rails的慣例,你需要重命名product.status到product.status_id。

產品belongs_to的:狀態
狀態的has_many:產品

Product.find(1).status.name應該是 '不可用'

0

如果你理解關係型數據庫的基礎知識,然後它的幾乎是一樣。
當你說,status belongs_to :productproduct has_many :statuses,它實質上意味着狀態表有一個外鍵,你可以用它來檢索給定產品ID的所有狀態行。

要建立這種關係,你需要在你的狀態表中創建新列product_id

rails g migration AddProductIdToStatuses product_id:integer 

完成後,添加以下你product.rb:

has_many :statuses 

並在你的status.rb這:

belongs_to :product 
+0

或者你可以添加一個引用就像這個鏈接說:http://stackoverflow.com/a/1635 2197555分之4779 – gm2008