2014-02-04 3 views
0

Итак, я пытаюсь создать связь между 3-мя моделями. Товары, Категории & Сделки.Связь Ruby on Rails между r-моделями

Все изделия относятся к одной категории и категориям могут содержать несколько элементов.

Class User 

end 

Class Item 
    belongs_to :category 
    has_many :transactions 
end 

Class Category 
    has_many :items 
end 

Class Categorization 
    belongs_to :item 
    belongs_to :category 
end 

Class Transactions 
    belongs_to :user 
    has_many :items 
end 

Где я бегу в проблемы в том, что я хочу для пользователей, чтобы иметь возможность создавать детали без их привязки к транзакции. В настоящее время, когда я запускаю Rspec, я получаю ошибку «Ожидаемая транзакция», чтобы иметь ассоциацию has_many, называемую элементами (элемент не имеет внешнего ключа transaction_id). Любые идеи о том, что я могу делать неправильно?

ответ

1

Когда вы говорите, класс сделок (это, вероятно, следует Transaction (singlular), является то, что просто опечатка?)

has_many :items 

рельсы ожидает таблица детали, чтобы иметь идентификатор транзакции, и bELONGS_TO: пункты

Вы

has_many :transactions 

в пунктах, что предполагает, что они имеют отношение «имеет и принадлежит многим». Если это так, тогда вы должны создать таблицу/модель соединения, которая связывает элементы и транзакции вместе. Точно так же ваши отношения между элементами и категориями выглядят схожим образом. Должны ли они иметь отношение «имеет и принадлежит многим»? Я думаю, что вы можете настроить его следующим образом:

Class Item 
    has_many :item_transactions, :dependent => :destroy 
    has_many :transactions, :through => :item_transactions 
    has_many :categorizations, :dependent => :destroy 
    has_many :categories, :through => :categorizations 
end 

class ItemTransaction 
    #has fields item_id, transaction_id 
    belongs_to :item 
    belongs_to :transaction 
end 

Class Category 
    has_many :categorizations, :dependent => :destroy 
    has_many :items, :through => :categorizations 
end 

Class Categorization 
    #has fields item_id, category_id 
    belongs_to :item 
    belongs_to :category 
end 

Class Transaction 
    #has field user_id 
    belongs_to :user 
    has_many :item_transactions, :dependent => :destroy 
    has_many :items, :through => :item_transactions 
end 
+0

У меня была установка 'itemtransaction table' ранее, но для этого не было правильной настройки отношений. Большое спасибо Rspec. – fiyah

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