首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4作用域联接以查找或查找关系

Rails 4作用域联接以查找或查找关系
EN

Stack Overflow用户
提问于 2018-05-10 11:01:35
回答 1查看 46关注 0票数 0

我有一个具有许多关系的rails 4.2.8应用程序。我的相互作用模型有和属于许多基因(具体来说,一个相互作用可以有2个基因,而一个基因可以属于任意数量的相互作用),而基因模型反过来又有许多药物和疾病。

我试图让用户根据其基因中是否有药物和/或与之相关的疾病来过滤交互作用。如果选择了药物或疾病的“过滤器”,下面的代码将按要求工作,因为所有与至少一个基因的相互作用都会被显示出来。

然而,当检查这两个筛选器时,我只显示其中一个或两个基因至少有一种药物,至少有一种相关疾病的相互作用。我想要展示的也是相互作用,其中一个基因有药物,但没有疾病,而另一个基因有疾病/s,但没有药物相关。

模型

代码语言:javascript
复制
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

交互控制器

代码语言:javascript
复制
class InteractionsController < ApplicationController
    ...
    @interactions = @interactions.disease_associated() if params[:filter_disease].present?
    @interactions = @interactions.drug_target() if params[:filter_druggable].present?
    ...

我没有找到任何明显解决这个问题的方法/问题,尽管这可能是因为我找不到能够简洁地解决问题的单词,无法有效地进行搜索。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-10 13:20:46

在Rails 4中,我可以提出两个选项:

1.身份证清单

代码语言:javascript
复制
ids = []
ids |= Interaction.disease_associated.pluck(:id) if params[:filter_disease].present?
ids |= Interaction.drug_target.pluck(:id) if params[:filter_druggable].present?

interactions = Interaction.where(id: ids)

如果数据库中有很多交互,那么清楚,但不是很好。

2.工会

Gem 友联市 gem为Rails提供了SQL支持。

代码语言:javascript
复制
interactions = Interaction.none
interactions = interactions.union(Interaction.disease_associated) if params[:filter_disease].present?
interactions = interactions.union(Interaction.drug_target) if params[:filter_druggable].present?

共同建议:使用通用查询而不是域来设计数据库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50271407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档