Ruby on rails 链接ActiveRecord::Associations记录时遇到问题
我试图为每个用户检索一个名为“contribution\u amount”的关联列,但我遇到了未定义的方法错误,我无法找出原因 控制器具有:Ruby on rails 链接ActiveRecord::Associations记录时遇到问题,ruby-on-rails,activerecord,associations,Ruby On Rails,Activerecord,Associations,我试图为每个用户检索一个名为“contribution\u amount”的关联列,但我遇到了未定义的方法错误,我无法找出原因 控制器具有: @payments = Payment.where(:contribution_date => Date.today).pluck(:user_id) @users = User.where(:id => @payments).find_each do |user| user.payments.contribution_amount e
@payments = Payment.where(:contribution_date => Date.today).pluck(:user_id)
@users = User.where(:id => @payments).find_each do |user|
user.payments.contribution_amount
end
模型包括:
class User < ActiveRecord::Base
has_many :payments
end
class Payment < ActiveRecord::Base
belongs_to :user
end
class用户
控制台中的确切错误是
`undefined method `contribution_amount' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Payment:0x007fb89b6b2c08>`
未定义的方法“供款金额”#`
用户。支付
是一个范围;也就是说,它表示付款
记录的集合。供款金额
方法仅适用于个人付款
记录。你可以说user.payments.first.contribution\u amount
,但我不确定这是你的目标
您是否正在尝试合计供款金额?在这种情况下,您可能希望使用一种聚合记录集合的方法:user.payments.sum(:contribution\u amount)
暂时偏离主题,通常最好将作用域方法向下推到模型中。例如:
class User < ActiveRecord::Base
def self.with_payment_contribution_after(date)
joins(:payments).merge(Payment.with_contribution_after(date))
end
def self.with_contribution_amount
joins(:payments).group("users.id")
.select("users.*, sum(payments.contribution_amount) as contribution_amount")
end
end
class Payment < ActiveRecord::Base
def self.with_contribution_after(date)
where(:contribution_date => date)
end
end
# In your controller
@users = User.with_payment_contribution_after(Date.today)
.with_contribution_amount
# In a view somewhere
@users.first.contribution_amount
class用户日期)
结束
结束
#在控制器中
@用户=用户。在(日期。今天)之后支付
.有_贡献_金额
#在某处的视野中
@用户。第一。供款金额
以这种方式构建代码的优点是:
接下来是一些额外的信息。我正在尝试获取每个用户在特定日期到期付款的供款金额。顺便说一句,感谢您提出的将作用域方法移动到模型中的建议。