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

因为颜色在现实中都是独一无二的,这是库存商品的特性我怎样才能这样建立一个关联,这样我就可以:
p @stock_item.colour.name
> Red

谢谢。
乌默尔

最佳答案

你需要添加一个属于协会的股票,而不是颜色,因为股票有颜色id

class Stock < ActiveRecord::Base
  belongs_to :colour
end

你很可能想在颜色上有很多联系
class Colour < ActiveRecord::Base
  has_many :stocks
end

关于ruby-on-rails - Rails协会:单向协会,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15296539/

10-09 22:16