3

Ruby on Rails (Ruby 1.9.3 Rails 3.2) でプログラムされた、サポーター向けのサポート チケット システムを作成しました。

belongs_toユーザー(サポーター)に関連付けられたチケットモデルがあります。

検索には Ernie の gem Ransack を使用します。サポーターが自分のチケット (tickets_controller.index で処理) を検索すると、関連付けられていないチケットも検索結果 (views/tickets/index) に表示されるはずです (「日付」などの他の検索条件と組み合わせて)。

(彼がオープンチケットを取ることができるように)

予想される SQL ステートメント:

SELECT * FROM tickets WHERE ... AND (user_id=5 OR user_id IS NULL) AND ... 

インデックス ビューの検索フォームで試しuser_id_null_or_user_id_eqましたが、機能しません (メソッド エラーはありません)。

この問題を解決するカスタム述語 (またはランサッカー) を作成するにはどうすればよいですか? (このコメントをありがとう@Magnuss)

残念ながら、私はアレルの経験がありません

何かのようなもの:

ransacker :user_null_or_eq do
    ...
end

チケットモデルで。

これで問題がより詳細に説明されることを願っています。

助けてくれてありがとう。

4

3 に答える 3

1

OK - ここに私自身の解決策があります - graywh に触発されました (どうもありがとうございました): ransack /issues/290

「or」コンビネータを使用して、新しいグループ化ノードをランサック オブジェクトに追加できます。

インデックスビューで私はに変更f.select :user_id_eqしましたselect_tag ...

ticket_controller.index:

@q = Ticket.search(params[:q])  
if params[:user_id_eq] && params[:user_id_eq]!=''  
  @q.build_grouping({:m => 'or', :user_id_eq => params[:user_id_eq], :user_id_null => true})  
end
于 2013-10-21T06:41:46.343 に答える
1

このようにクエリパラメータを作成できます

q: {g: [ {m: 'or', user_id_eq: 5, user_id_null: 1} ] }

ここで:

user_id_null: 1

null値を検索するための唯一のフラグです

于 2016-02-09T10:31:42.047 に答える