1

我正在学习 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

谢谢。

乌梅尔

4

1 回答 1

6

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

class Stock < ActiveRecord::Base
  belongs_to :colour
end

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

class Colour < ActiveRecord::Base
  has_many :stocks
end
于 2013-03-08T14:43:35.480 回答