2017-12-12 12 views
1

私はRoRにはとても新しいので、正しい質問をしているかどうかはわかりません。しかし、ここにそれがあります。Ruby on Rails:コントローラから計算されたメソッドをクエリまたはフィルタリングする方法はありますか?

私は仲介3機種方針、CommissionInvoiceを、持っている

仲介 -

has_many :commission_invoices, foreign_key: :intm_no 

CommissionInvoice -

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

ポリシー - 私のIntermeで

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 

はその後、私のポリシーモデルに私はこのような方法を作った。

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を使用して今日の日付?最初からすべてのレコードが表示されているためです。私の質問がはっきりしていることを願っています前もって感謝します。 :)あなたは、アレイの選択方法使用してフィルタリングすることができます

答えて

0

:たとえばhttps://ruby-doc.org/core-2.2.0/Array.html#method-i-select

commission_invoiceがfalseyであれば、due_datenilを返しますので、

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?のチェックを追加しました。

+0

コントローラーにはどこに入れますか?またはビューで? –

+0

技術的には、コントローラーまたはビューのいずれかに入れることができますが、コントローラーに入れる方がきれいだと思います。私はそれを示すために私の答えを編集しました。 –

+0

私はフィルタリングされたデータをチェックしていますが、今は問題ないと思いますが、ビューモジュールのdue_dateに該当しないポリシーだけが隠され、他のページをスキャンすることによってそれは1つのポリシーがあると言われていますが、空白です。どのようにして今日のすべてのポリシーを照会するだけで、他のポリシーを使用しないようにするには、ビューモジュールを作成することができますか?助けてくれてありがとう。 –

関連する問題