たとえば、私はstart_date
とlength
(日を表す整数として)というイベントがあります。Rails&Ransack - モデル内の定義に基づいて並べ替え/検索する
私はend_date
あなたが期待する非常に単純としてstart_date + length.days
ように定義するモデルで:
def end_date
start_date + length.days
end
すべてがテンプレートで正常に動作し、私は開始日を表示するためにevent.end_date
を使用することができますプラスしかし、多くの日数の長さをに設定しました、の場合は、Ransackを使用して終了日までにイベントを注文したいと考えています。
start_date
の並べ替えのリンクは次のようになります。<%= sort_link @q, :start_date, "Start" %>
私はEND_DATE(<%= sort_link @q, :end_date, "End" %>
)のために同じことをしようとした場合、私はそれが表に列としてend_date
を探して、それを見つけていない推測として、それは残念ながら静かに失敗しました。
私は単に愚かであるか、何かをしようとしていますか?単にRansackはやらなかったのですか?ただ、私はそれをやった方法を見たい人の利益のために
ransackは検索パラメータをActiveRecord ORM上のクエリに変換するように見えます。これは、基礎となるDBが検索できる実際の列がない限り間違いなく失敗します。 – bdares
コメントありがとう@bdares。私はモデルの 'ransacker:end do | r |'を 'Arel :: Nodes :: SqlLiteral.new(" DATE_ADD(events.start_date、INTERVAL events.length DAY) ")'に設定することができました。クエリを生成する: 'SELECT DISTINCT events。* FROM events DATE_ADD(events.start_date、INTERVAL events.length DAY)DESC LIMIT 30 OFFSET 0'。それはうまくいくが、ひどく「ハッキー」と感じる。 – bensmithbwd
@bensmithbwd - あなたのコメントの完全な解決策を見るのは難しいです。完全な例を書くために気をつけて、解決策をよりよく理解できるようにしてください。その後、あなた自身の答えを受け入れることができます。 –