【问题标题】:Render an ActiveReccord:relationship with specific cat value渲染一个 ActiveReccord:relationship 与特定的 cat 值
【发布时间】:2019-05-27 12:35:24
【问题描述】:

我的标题不是很清楚,我不知道如何制定,如果你有建议,我可以编辑它。

我想从我的 user_facturation 中渲染所有任务。但我不知道如何使用当前的数据库结构来做到这一点。

我的关系:

mission has_many :mission_facturations
mission_facturation belongs_to :mission

Mission_facturation 可以与许多元素构造(用户、合作伙伴等)相关联。所以为了保存这个关系,我保存了一个 fact_cat 和一个 fact_id 列。 (有点多态关系)

例如,如果我想将我的 Mission_facturation 与第一个 user_facturation 关联,我会记录:

mission_facturation.update(fact_cat: 8, fact_id: UserFacturation.first.id)

现在,我想直接从我的 user_facturation 模型访问所有任务。最初,我在模型 user_facturation.rb 中使用该方法

def missions
  MissionFacturation.where(fact_cat: 8, fact_id: self.id).where.not(mission_id: nil).map(&:mission)
end

但这不是渲染 ActiveReccord::Relation,所以当我将它用于循环时,它不能正常工作

您有什么解决方案可以将一组任务渲染到我的 user_facturation 模型中吗?

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-5


    【解决方案1】:

    使用 Mission 模型开始查询,如下所示:

    Mission.joins(:mission_facturations).where(mission_facturations: {fact_cat: 8, fact_id: self.id)
    

    或者您甚至可以在 User 类上设置关系,以便 AR 为您处理连接:

    has_many :mission_facturations, -> { where(fact_cat: 8) }, :foreign_key => "fact_id"
    has_many :missions, through: :mission_facturations
    

    【讨论】:

    • 嗨@arieljud,感谢您的回答,这正是我正在寻找的!第一个解决方案运行良好!但第二个看起来最强。唯一的事情是它不起作用,因为第一行没有指定 id。我认为第一个应该是这样的:has_many :mission_facturations, -> { where(fact_cat: 8, fact_id: self.id) }。但显然不是好的语法。你对回应有什么想法吗?
    猜你喜欢
    • 2021-03-07
    • 2016-11-02
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2011-08-28
    • 2011-11-05
    • 2014-09-22
    相关资源
    最近更新 更多