2013-10-16 25 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