Rails Association:单向关联

ume*_*erh 1 ruby ruby-on-rails associations

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

让我们说你是一个产品(股票),每个产品都有颜色,通常正确的方法是建立一个关联.请看下面的代码:

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

class Colours < ActiveRecord::Base
 belongs_to :stock
end
Run Code Online (Sandbox Code Playgroud)

实际上我想要做的是

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
Run Code Online (Sandbox Code Playgroud)

实际上,查询应该是:

SELECT  "colours".* FROM "colours"  WHERE "colours"."id" = "stock"."colour_id"
Run Code Online (Sandbox Code Playgroud)

由于颜色在现实中都是独一无二的Stock商品的属性.如何以这种方式设置关联,以便我可以:

p @stock_item.colour.name
> Red
Run Code Online (Sandbox Code Playgroud)

谢谢.

乌默尔

jvn*_*ill 6

你需要将一个belongs_to关联添加到库存而不是颜色,因为库存有colour_id

class Stock < ActiveRecord::Base
  belongs_to :colour
end
Run Code Online (Sandbox Code Playgroud)

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

class Colour < ActiveRecord::Base
  has_many :stocks
end
Run Code Online (Sandbox Code Playgroud)