Ruby on Rails:如何从控制器查询或过滤计算方法?

时间:2017-12-12 01:59:13

标签: ruby-on-rails

我对RoR很新,我不确定我是否在问正确的问题。不过就在这里。

我有3个模型Policy,CommissionInvoice,Intermediary

中介 -

    has_many :commission_invoices, foreign_key: :intm_no

CommissionInvoice -

    belongs_to :policy, foreign_key: :policy_id
    has_one :intermediary, foreign_key: :intm_no

政策 -

    has_one :commission_invoice, foreign_key: :policy_id
    has_one :intermediary, through: :commission_invoice, foreign_key: :intm_no

在我的中间模型中,我做了一个这样的方法:

  def credit_term
    if type == "BR"
      90
    else
      30
    end
  end

然后在我的Policy模型中,我创建了一个这样的方法:

  def due_date
    effectivity + intermediary.credit_term if commission_invoice
  end

有效性是列名。

对于我的PoliciesController:

  def due_today
    @policies = Policy.order(sort_column + " " + sort_direction).includes([:commission_invoice => :intermediary]).page(params[:page]).per(10)
  end

现在,我的问题是,如何使用计算方法 due_date 过滤来自控制器的查询数据(或者如果您可以建议任何其他解决方案)到今天的日期?因为从一开始就显示所有记录。我希望我的问题很清楚。提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

您可以使用数组选择方法进行过滤:https://ruby-doc.org/core-2.2.0/Array.html#method-i-select

例如:

def due_today
    @policies = Policy.order(sort_column + " " + sort_direction).includes([:commission_invoice => :intermediary]).page(params[:page]).per(10)

    @policies = @policies.select {|p| p.due_date.present? && p.due_date <= Date.today}
end

我添加了对due_date.present?的检查,因为如果commission_invoice为假,due_date将返回nil