1

无法理解 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 中显示状态名称。我应该在模型和迁移文件中写什么(例如,对于 which belongs_to、has_one 或 has_many...)?

4

3 回答 3

0

Product shouldbelongs_to :status和 Status shouldhas_many :products用于简单的一对多关联,您不需要为产品设置状态。在 erb 你会使用<%= @product.status.name %>. 设置这些迁移,create_table :products do |t| t.string :name; t.integer :status_id; end以及create_table :statuses do |t| t.string :name; end

更多信息在这里

于 2013-10-16T17:55:50.570 回答
0

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

产品属于_to :status
状态 has_many :products

Product.find(1).status.name 应该是“不可用”

于 2013-10-16T17:57:04.267 回答
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
于 2013-10-16T18:00:14.150 回答