2017-10-11 5 views
1

검색 양식에 Ransack을 사용하고 ransack_alias을 사용하여 쿼리를 줄이려고합니다. 그러나 검색을 수행 할 때 별칭이 지정된 필드는 쿼리를 전혀 필터링하지 않습니다. 나는 하나의 간단한 별칭을 갖도록 양식을 단순화했으며 작동하지 않는 것 같습니다.ransack_alias가 쿼리에서 아무 것도하지 않음

사용자 모델

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

index.html.haml

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

내가 컨트롤러 내부에 중단 점을 넣을 경우

>> 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%')