2012-05-23 3 views
0

Я настраиваю приложение для размещения интересующих предметов/доступных/бартер. У меня есть два основных класса: «Почта» и «Предмет».Настройка внешних ключей с несколькими отношениями has_one

Каждое сообщение содержит предлагаемое_имя, желаемое_имят или и то, и другое. Вот мои текущие определения:

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 или offer_item)? Это делается в файлах миграции или в моделях?

В настоящее время он сидит, когда я пытаюсь запрос типа:

Post.find(:first).wanted_item 

Я получаю следующий:

SQLite3 :: SQLException: Указанных колонок: items.post_id: SELECT " «. * FROM " " "ПОЗИЦИИ", где" предметы post_id"= 1 LIMIT 1

ответ

2

Вы можете установить условия на ассоциациях, например, так:

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

и добавить kind столбец Item (не использовать «тип», это зарезервированное слово).

EDIT: чтение вашего сообщения снова, ваш стол Item кажется лишен внешнего ключа. В файле миграции, который создает таблицу Item, просто включите t.references :post, чтобы рельсы создали столбец внешнего ключа post_id.

+0

Это отлично поработало, спасибо! –

Смежные вопросы