0

欲しい/利用できる/物々交換するアイテムを投稿するためのアプリを設定しています。PostとItemの2つのメインクラスがあります。

各投稿には、offered_item、wanted_item、またはその両方が含まれています。これが私の現在の定義です:

class Post < ActiveRecord::Base
  has_one :wanted_item, :class_name => 'Item', :dependent => :destroy
  has_one :offered_item, :class_name => 'Item', :dependent => :destroy
  has_one :location, :dependent => :destroy
end

class Item < ActiveRecord::Base
  belongs_to :post

  attr_accessible :title, :description
end

私の質問に移ります:どの投稿(そしてそれがwanted_itemかoffered_itemか)を知ることができるように、Itemsテーブルの外部キーをどのように構成しますか? これは移行ファイルまたはモデルで行われますか?

現在のところ、次のようなクエリを試してみると、

Post.find(:first).wanted_item 

私は次のようになります:

SQLite3 :: SQLException:そのような列はありません:items.post_id:SELECT"items"。*FROM "items"WHERE"items"。"post_id"= 1 LIMIT 1

4

1 に答える 1

2

次のように、関連付けに条件を設定できます。

has_one :wanted_item, :class_name => 'Item', :conditions => ['kind = ?', 'wanted']

kindに列を追加しますItem(「type」は使用しないでください。予約語です)。

編集:あなたの投稿をもう一度読んで、あなたのItemテーブルは外部キーを欠いているようです。Itemテーブルを作成する移行ファイルにt.references :post、railsにpost_id外部キー列を作成させるように含めるだけです。

于 2012-05-23T16:29:06.360 に答える