class Subject
has_many :subject_attribute_types
has_many :subject_attributes
accepts_nested_attributes_for :subject_attributes
end
class SubjectAttributeType
belongs_to :subject
has_many :subject_attributes
attr_accessible :type_name
end
class SubjectAttribute
belongs_to :subject
belongs_to :subject_attribute_type
attr_accessible :value
end
Например:
поиск nested_attributes в рельсах
s1 = Subject.create()
s2 = Subject.create()
sat1 = SubjectAttributeType.create(subject: s1, name: 'Age')
sat2 = SubjectAttributeType.create(subject: s1, name: 'Sex')
sat3 = SubjectAttributeType.create(subject: s2, type_name: 'Age')
sat5 = SubjectAttributeType.create(subject: s2, type_name: 'Username')
SubjectAttribute.create(subject: s1, subject_attribute_type: sat1, value: 20)
SubjectAttribute.create(subject: s1, subject_attribute_type: sat2, value: "male")
SubjectAttribute.create(subject: s2, subject_attribute_type: sat3, value: 21)
SubjectAttribute.create(subject: s2, subject_attribute_type: sat1, value: "user1")
Проблема:
Что лучшая практика, чтобы сделать поиск по точному subject_attributes.
Если я хочу, чтобы найти все субъекты с возрастом> = 18 и прозвище, как% пользователя%
В настоящее время я использую Ransack камень, но я не могу думать о том, как сделать поиск по nested_attributes
1) Бизнес-логика. Да! Вы абсолютно правы, в ассоциации Subject для AttributeType не было необходимости. 2) _Otherwise, может быть, это действительно просто столбцы Субъектов? _ Не решение, в будущем в mby будет добавлен новый атрибут AttributeType. «Вес или высота», например. Pluss не все AttributeTypes используются в каждом предмете. 3) несколько запросов да, это решение, но дает ту же проблему, что и с новым атрибутом AttributeType также необходимо добавить запрос. – maxnov
вы все еще можете сделать это на лету: пара foreach делает запрос, а затем пересекает их с &. И это, если только вам нужны все атрибуты для фильтрации ваших предметов. –