Railsで検索画面作るなら、Ransack ですよね。
めっちゃ便利。
あなたなしには生きていけない
もうあなたなしに、地道にcontrollerとmodelいじってた頃のことなんて、思い出せない...
検索機能を追加したい。
特に込み入った条件の… というとき、皆さんどうされます?
私は、ransackable_scopeを使います。
- ActiveRecord で scope 作り
- それをransackからの使用を許可します
#ransackable_scopes
詳細は、↓に譲ります(ry
Ransack で ActiveRecord の Scope を利用して検索を行う方法
公式
この2番、面倒くさくないですか?
ransackでは、どのassociation, scope, model, 検索方式を使えるかを
権限制御として操作可能になってます。
このscope部分だけが、defaultで [] つまり、全拒否。
めんどい…。(エンジニア的美徳と信じて。)
正直、これが問題になること滅多にないので、
↓のmonkey patchでオーバーライド(ransackable_scopeを全無視)させました
# 全scopeを使OK
module Ransack
class Context
def ransackable_scope?(str, klass)
klass.respond_to? str
end
end
end
引数 0-1個のscopeは全部検索に使用可能です。
option引数を第二引数以降にいれても大丈夫ですしね。
また、パラメーターを配列にすれば、2引数以上でもOK(展開してくれる)
例 ?q[my_scope][]=arg1&q[my_scope][]=arg2&q[my_scope][]=arg3
というわけで、自由勝ち取りました
まぁ、セキュリティあまり気にしない社内システムとか限定1で、
個人の責任でご使用くださいまし。
-
厳密には、ホワイトリスト型からブラックリスト型にするのがいいんだろな。
#ransackable_limited_scope
とか作って。 ↩