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"

色はすべて実際にはユニークであるため、ストックアイテムのプロパティです。この方法で関連付けを設定して、次のことができるようにするにはどうすればよいですか。

p @stock_item.colour.name
> Red

ありがとう。

Umer

4

1 に答える 1

6

ストックにはcolour_idがあるため、カラーではなくストックにbelongs_toアソシエーションを追加する必要があります。

class Stock < ActiveRecord::Base
  belongs_to :colour
end

そしてあなたはおそらく色に関するhas_manyの関連付けが必要です

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