У меня есть приложение rails 4.2.8 с рядом взаимосвязей.Моя модель взаимодействия имеет и принадлежит многим генам (в частности, взаимодействие может иметь 2 гена, в то время как ген может принадлежать к любому количеству взаимодействий), а модель гена, в свою очередь, имеет много лекарств и болезней.
Я пытаюсьпозволяют пользователям фильтровать взаимодействия на основе того, имеет ли тот или иной из его генов наркотик и / или заболевание, связанное с ним.Приведенный ниже код работает, как требуется, если выбран «фильтр» для препарата или болезни, так как отображаются все взаимодействия, по крайней мере, с одним геном, по крайней мере, с одной из этих ассоциаций.
Однако, когда оба фильтра отмечены, яотображает только взаимодействия, в которых один или оба из генов имеют по крайней мере одно лекарство и по крайней мере с одним заболеванием.Я хотел бы также показать взаимодействия, в которых у одного гена есть лекарственное средство (а), но нет заболевания, а у другого гена есть заболевание (я), но нет связанных с ним лекарств.
Модели
class Interaction < ActiveRecord::Base
has_and_belongs_to_many :genes
...
scope :disease_associated, -> { joins(genes: :diseases) }
scope :drug_target, -> { joins(genes: :drugs) }
...
end
class Gene < ActiveRecord::Base
has_and_belongs_to_many :interactions
has_and_belongs_to_many :drugs
...
end
class Drug < ActiveRecord::Base
has_and_belongs_to_many :genes
end
class Disease < ActiveRecord::Base
has_and_belongs_to_many :genes
end
Контроллер взаимодействия
class InteractionsController < ApplicationController
...
@interactions = @interactions.disease_associated() if params[:filter_disease].present?
@interactions = @interactions.drug_target() if params[:filter_druggable].present?
...
Я не нашел подходов / вопросов, которые явно решают эту проблему, хотя это может быть результатом того, что я не смог найти слова длярешите проблему достаточно кратко для эффективного поиска.
Заранее спасибо!