Rails与模型和迁移相关联

时间:2013-10-16 17:29:09

标签: ruby-on-rails ruby ruby-on-rails-3 model ruby-on-rails-4

无法理解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 ......)?

3 个答案:

答案 0 :(得分: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

more information here

答案 1 :(得分:0)

首先,根据rails约定,您需要将product.status重命名为product.status_id。

产品belongs_to:状态
状态has_many:产品

Product.find(1).status.name应为'不可用'

答案 2 :(得分: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