Вот что у меня есть.
client has_many branches
branch has_many projects
project has_and_belongs_to_many announcements
Есть ли более простой способ найти объявления, предоставленные клиенту?
Мне нужна уникальная коллекция объявлений.
Вот что у меня есть.
client has_many branches
branch has_many projects
project has_and_belongs_to_many announcements
Есть ли более простой способ найти объявления, предоставленные клиенту?
Мне нужна уникальная коллекция объявлений.
Если у Клиента может быть несколько Объявлений, но Объявление может принадлежать только одному Клиенту, используйте:
Client:
has_many :announcements
Announcement:
belongs_to :client
Это удерживает его в ActiveRecord. Вы можете найти объявления для данного клиента с помощью нескольких быстрых вызовов методов. Прокрутите вниз до «Модели присоединения ассоциаций» для примеров: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
Почему бы не создать таблицу соединений для обработки отношений «многие ко многим» между моделями «Клиент» и «Объявление»? Что-то типа:
Client:
has_many :announcements, :through => :client_announcements
Announcement:
has_many :clients, :through => :client_announcements
ClientAnnouncements:
belongs_to :client
belongs_to :project
Затем вы можете настроить объект для поиска объявлений, прикрепленных к определенному идентификатору клиента, или наоборот.
PS: ответ может быть не исчерпывающим, я не являюсь родным разработчиком Rails — проверьте документацию API для примеров того, что я затронул: http://api.rubyonrails.org/classes/ActiveRecord/Ассоциации/ClassMethods.html
Вы можете создать новое отношение, используя символ uniq на habtm.
has_and_belongs_to_many :uniq_announcements, :source=>:announcements, :uniq=>true
или просто позвоните uniq!
project.announcements.uniq