2017-10-11 15 views
1

検索フォームにRansackを使用しましたが、ransack_aliasを使用してクエリを短縮しようとしています。しかし、検索を実行すると、エイリアス化されたフィールドはクエリをまったくフィルタリングしません。単純なエイリアスを1つだけ持つようにフォームを単純化していて、うまくいかないようです。ransack_aliasはクエリで何もしません

= search_form_for @q, url: users_path, html: {method: :get} do |f| 
    = f.label :ec 
    = f.search_field :ec 
    = f.submit 'Search' 

index.html.haml

ユーザモデル

class User < ActiveRecord::Base 
    ransack_alias :ec, :email_cont 
end 

私は、コントローラ内のブレークポイントを置く場合:

>> User.count 
10 

>> User.ransack({email_cont: "[email protected]"}).result.count 
(93.8ms) SELECT COUNT(*) FROM "users" WHERE ("users"."email" ILIKE '%[email protected]\.com%') 
1 

>> params[:q] 
{"ec" => "[email protected]"} 

>> User.ransack(params[:q]).result.count 
(28.4ms) SELECT COUNT(*) FROM "users" 
10 

>> User._ransack_aliases 
{"ec" => "email_cont"} 

私はここで間違って何をしているのですか?

答えて

1

ransack_aliasは、エイリアシング属性ですが、比較キーではありません。

class User < ActiveRecord::Base 
    ransack_alias :e, :email 
end 

> User.ransack({'e_cont' => "user"}).result.count 
(0.2ms) SELECT COUNT(*) FROM "users" WHERE ("users"."email" LIKE '%user%') 
関連する問題