Rails 关联:单向关联

Posted

技术标签:

【中文标题】Rails 关联:单向关联【英文标题】:Rails Associations: One way associations 【发布时间】:2013-03-08 14:42:12 【问题描述】:

我正在学习 Rails 和 ActiveRecord 的东西,但我有点卡在这个小问题上。

假设您是一个产品(库存),并且每个产品都有颜色,通常正确的方法是建立关联。请看下面的代码:

class Stock < ActiveRecord::Base
 attr_accessible :size, :colour_id
end

class Colours < ActiveRecord::Base
 belongs_to :stock
end

其实我想做的就是

p @stock_item.colour.name
# But I get this error
SQLite3::SQLException: no such column: colours.stock_id: SELECT  "colours".* FROM "colours"  WHERE "colours"."stock_id" = 1 LIMIT 1

实际上查询应该是:

SELECT  "colours".* FROM "colours"  WHERE "colours"."id" = "stock"."colour_id"

由于颜色在现实中都是唯一的 Stock 项目的属性。如何以这种方式设置关联以便我可以这样做:

p @stock_item.colour.name
> Red

谢谢。

乌尔

【问题讨论】:

【参考方案1】:

你需要给 stock 添加一个 belongs_to 关联,而不是给 color 添加一个 belongs_to 关联,因为 stock 有 colour_id

class Stock < ActiveRecord::Base
  belongs_to :colour
end

你很可能想要一个关于颜色的 has_many 关联

class Colour < ActiveRecord::Base
  has_many :stocks
end

【讨论】:

非常感谢。我想现在是时候好好阅读一本关于 Rails 或指南的书了!

以上是关于Rails 关联:单向关联的主要内容,如果未能解决你的问题,请参考以下文章

hibernate关联关系映射

3.7 将单向关联改为双向

Hibernate单向“多对一”关联

Jpa之关联对象(单向多对多)

JPA:映射关联关系------映射单向多对一的关联关系

hibernate学习四 hibernate关联关系映射