【问题标题】:How can I write this statement so it stays as an ActiveRecord call?如何编写此语句以使其保持为 ActiveRecord 调用?
【发布时间】:2013-05-28 14:47:41
【问题描述】:

我正在尝试进行一个查询,我相信它是一个双连接调用。

@customer.jobs.joins(:assignments).where('assignments.employee_id' => current_user.id).collect{|j|j.payments}.flatten

我正在寻找付款,前提是它们已分配给我的客户记录下的 current_user。

付款通过连接表 (payment_applications) 连接到客户。员工通过连接表 (assignments) 分配给 Jobs。

上面的查询返回正确的对象,但它是一个数组,所以我不能将它们分配给分页。如何使该查询保持为 ActiveRecord 调用?

【问题讨论】:

标签: mysql ruby-on-rails join


【解决方案1】:

如果您想以 Payments 结束,我建议您从那里开始查询:

@payments = Payment.for_customer(customer)

在你的模型中:

class Payment < ActiveRecord::Base
  def self.for_user(user)
    joins(:assignments).where('assignments.employee_id' => user.id)
  end
end

如果你想加入客户记录,请更改为

joins(:assignments => :customers)

【讨论】:

  • 付款与分配无关。付款与 payment_applications 相关联,这是一个将付款连接到工作的连接表。工作通过assignments 连接到员工。
  • payments => payment_applications => 工作(可以有很多工作)=> assignments => 员工(可以有很多员工)
  • soooo 将其更改为 joins(:payments => :payment_applications => :jobs => :assignments => :employees)
  • 我想我只是不知道如何从语法上写出来。 :D
  • 但我只是为你做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多