【问题标题】:ransack_alias not doing anything in queryransack_alias 在查询中没有做任何事情
【发布时间】:2017-10-11 16:03:36
【问题描述】:

我将 Ransack 用于我的搜索表单,并尝试使用 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: "test@email.com"}).result.count
(93.8ms)  SELECT COUNT(*) FROM "users" WHERE ("users"."email" ILIKE '%test@email\.com%')
1

>> params[:q]
{"ec" => "test@email.com"}

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

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

我在这里做错了什么?

【问题讨论】:

    标签: ruby-on-rails ransack


    【解决方案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%')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-07
      • 2016-10-02
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多