无法理解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 :(得分:0)
产品应belongs_to :status
和状态应has_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
答案 1 :(得分:0)
首先,根据rails约定,您需要将product.status重命名为product.status_id。
产品belongs_to:状态
状态has_many:产品
Product.find(1).status.name应为'不可用'
答案 2 :(得分:0)
如果您了解关系数据库的基础知识,那么它几乎是一回事
当您说status belongs_to :product
和product has_many :statuses
时,它实质上意味着状态表有一个外键,您可以使用该外键检索给定产品ID的所有状态行。
要建立此关系,您需要在状态表中创建新列product_id
:
rails g migration AddProductIdToStatuses product_id:integer
完成后,在product.rb中添加以下内容:
has_many :statuses
这是你的status.rb:
belongs_to :product