Я создал отношения «многие ко многим», используя has_many: через таблицу соединений.Как создать область элементов еще не во многих отношениях?
class ProductType < ActiveRecord::Base
has_many :assemblies
has_many :components, through: :assemblies
end
class Assembly < ActiveRecord::Base
belongs_to :product_type
belongs_to :component
end
class Component < ActiveRecord::Base
has_many :assemblies
has_many :product_types, through: :assemblies
end
Из полного списка компонентов, можно выбрать несколько и добавить их к PRODUCT_TYPE , но я должен быть разрешен только добавить их один раз, так что список компонентов для добавления из, должны показывать только компоненты, которые еще не добавлены.
я в настоящее время он работает с 1) список уже добавленных компонентов
@product_type.components
2) список еще не добавлены те
Component.all - @product_type.components
Это работает, но я хотел бы для создания области на модели компонентов, чтобы что-то вроде
@product_type.components.addable
будет генерировать второй список еще не добавленных компонентов.
Возможно ли это? Если да, то каким будет код на модели компонентов? или он будет работать в ProductType? (Я не нашел ничего, что работает) Кроме того, есть ли название для этого списка еще не добавленных компонентов? Будет ли это «правильным внешним соединением»? если нет, то что?
спасибо
Спасибо за быстрый ответ. Я попробовал, но я получаю эту ошибку SQLite3 :: SQLException: неоднозначное имя столбца: assemblylies.product_type_id: – gkrawiec
Я подозреваю, что вы по-прежнему используете отношение компонентов к объекту типа продукта. Поскольку вы ищете компоненты, у которых нет сборок, Component.addable будет предпочтительнее @ product_type.components.addable –
Правильно, но добавочные компоненты относятся к продукту_типа. Не общий. Каждый product_type имеет список уже добавленных компонентов и собственный личный список добавляемых компонентов. Если я сделаю Component.addable, это даст мне список компонентов, еще не включенных в какой-либо product_type. – gkrawiec