【问题标题】:Association Clarification协会澄清
【发布时间】:2014-06-26 13:19:39
【问题描述】:

我有以下关联

User - has_many :campaigns
Campaign - has_many :donations
           belongs_to :user
Donation - belongs_to :campaign

作为用户,我想获得为 current_user 创建的活动所做的所有捐款的总和,所以我尝试了这个

@campaigns = current_user.campaigns
@total_donations = @campaigns.dontations.sum('donation_amount')

但这并不那么简单,因为我必须遍历属于该用户的每个广告系列。对吗?

解决这个问题的最佳方法是什么?范围或实例方法也会更好吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 associations


    【解决方案1】:

    has_many :through association 应该可以工作:

    class User < ActiveRecord::Base
      has_many :campaigns
      has_many :donations, through: campaigns
    end
    
    current_user.donations.sum(:donation_amount)
    

    【讨论】:

    • 谢谢@Stefan,成功了,我的错误是在我不需要的时候尝试通过广告系列模型进行访问?
    • @Stefan 所做的事情可以通过 Donation.joins(:campaigns).where(campaings: { user_id: &lt;user_id&gt; }).sum(:donation_ammount) 完成。 has_many 类方法启用速记。 +1
    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 2019-11-15
    • 2013-06-05
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多