标签: ransack

Ransack,搜索多个列,一个字段,轨道3

我是Ruby on Rails的新手,我正在创建我的第一个网站.我有3列的用户模型:firstname,lastnameemail.我使用ransack制作搜索引擎,我希望有一个搜索字段,它将遍历每一列并显示结果.

我创建了一个user_controller.rb,如下所示:

@q = User.search(params[:q])
@users = @q.result(:distinct => true)
Run Code Online (Sandbox Code Playgroud)

我的User\index.html.erb看起来像这样:

<%= search_form_for @search do |f| %>
  <div class="field">
    <%= f.label :firstname_cont , "Firstname" %>
    <%= f.text_field :firstname_cont %>
    <%= f.label :lastname_cont , "Lastname" %>
    <%= f.text_field :lastname_cont %>
    <%= f.label :email_cont , "Email" %>
    <%= f.text_field :email_cont %>
  </div>
  <div class="actions"><%= f.submit "Search" %></div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

给了我3个搜索字段,但我只想要一个通过名字,姓氏和电子邮件.

编辑1:在测试了一些之后,我发现搜索字段不能同时处理名字和姓氏,也不能处理任何空格.我已经读过可以像这样制作一个helper_method: 用Ransack搜索多个字段

当我得到搜索结果时,我会被扔进我的模型索引等:user/index.我在哪里可以改变这个?

但是在视图中如何使用它没有任何意义.为什么这么辛苦,这就是你所做的:在Controller中这样做 - >在模型中做这个 - >在视图中做这个 - …

search ruby-on-rails ransack

10
推荐指数
1
解决办法
1万
查看次数

Rails 3.1 Ransack HABTM

Ransack是否支持HABTM?

拥有模型:

  • 购买HABTM类别
  • 类别HABTM商店

我可以使用ransack通过单一类别搜索商店吗?表格是什么样的?

search ruby-on-rails has-and-belongs-to-many ransack

9
推荐指数
2
解决办法
2010
查看次数

Ransack,查找具有所有相关记录的记录

我有一个配方模型,其中包含很多成分,每种成分都属于一个项目.在我的高级搜索表单中,我希望用户选择多种成分,让Ransack找到包含用户选择的所有成分的配方.

我尝试了以下搜索字段:

= f.collection_select(:ingredients_item_id_in, Item.all, :id, :name, {}, {multiple: true})
Run Code Online (Sandbox Code Playgroud)

但从逻辑上讲,这会导致显示的所有配方都含有任何选定的成分.

由于一条记录不能包含多个item_id值,因此更改:ingredients_item_id_in:ingredients_item_id_in_all不正确的查询结果.

有关在Ransack中创建此搜索参数的任何想法,还是应该为此创建子查询?

根据要求,我的控制器搜索方法:

  def search
    @q = Recipe.ransack(params[:q])
    @recipes = @q.result(distinct: true).include_related_models.published
  end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ransack

9
推荐指数
1
解决办法
942
查看次数

将复杂的postgresql查询/子查询转换为Rails activerecord语法或将数组转换为活动记录关系?

所以我花了很多时间来编写这个查询,然后发现这是一个很难的方式,它返回一个数组而不是一个activerecord关系.DOH.这不会是一个问题,但我需要在这些结果上使用Ransack,这需要关系.

所以,基本上,我需要使用语法.joins()和.select()将其转换为Rails,但我尝试过的所有内容都出错了.我猜我可能需要潜入AREL?

或者,如果这可以很容易地转换为具有最小性能问题的activerecord关系并保留我的别名列,那么它也可以工作!

任何帮助或建议都受到赞赏!

find_by_sql("
  SELECT
    subq.*, 
    renewal_date,
    days_until_due,
    renewal_stage_sort,
    (
      CASE
        WHEN renewal_stage_sort IS NOT NULL THEN
          CASE
            WHEN days_until_due > 42 AND renewal_stage_sort >= 1 THEN TRUE
            WHEN days_until_due > 28 AND days_until_due < 43 AND renewal_stage_sort >= 2 THEN TRUE
            WHEN days_until_due > 13 AND days_until_due < 29 AND renewal_stage_sort >= 3 THEN TRUE
            WHEN days_until_due > -1 AND days_until_due < 14 AND renewal_stage_sort >= 4 THEN TRUE
            WHEN days_until_due < 0 AND renewal_stage_sort >= 5 THEN …
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord arel ransack ruby-on-rails-4

9
推荐指数
1
解决办法
105
查看次数

标题部分中的搜索搜索表单:没有Ransack ::搜索对象已提供给search_form_for

首先,我是RoR的新手,所以答案可能很明显,在这种情况下我道歉.我环顾四周,找不到任何有用的东西.

我正试图在我的应用程序的每个网页的标题上都有一个搜索表单,它将搜索我所有"桶"的名称.这是相关代码:

在app/views/layouts/_header.html.erb中(在导航栏中):

<% search_form_for @q do |f| %>
  <%= f.label :name_cont %>
  <%= f.text_field :name_cont %>
  <%= f.submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

在app/controllers/buckets_controller.rb中:

def index
  unless params[:q].blank?
    @q = Bucket.search(params[:q])
    @buckets = @q.result.paginate(:page => params[:page])
  else
    @buckets = Bucket.find(:all, :limit => 5).paginate(:page => params[:page])
  end
end
Run Code Online (Sandbox Code Playgroud)

我理解最后一部分并不是那么好:我想要做的就是如果我只是访问存储桶索引页面(而不是通过搜索),我会显示最近创建的5个存储桶.当我在标题表单中搜索某些内容时,我会访问索引页面,但只显示搜索到的内容.(处理它的更好方法是将搜索页面与索引页面分开吗?)

我发现这个问题几乎完全相同,但是@q如果每个页面都有表格,我仍然不知道如何处理- 当然我不必改变每个控制器的每一个动作?

提前抱歉,因为我的愚蠢,我的愚蠢!

model-view-controller ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ransack

8
推荐指数
1
解决办法
5001
查看次数

Ransack OR查询

我想搜索所有NULL或使用ransack值为-1的字段.

search({:param_name_null => 1 }) 
Run Code Online (Sandbox Code Playgroud)

将给出空值

search({:param_name_is_any => -1 })
Run Code Online (Sandbox Code Playgroud)

将给出-1s

如何使用ransack在这两者之间进行OR?谢谢

ruby-on-rails-3 ransack

8
推荐指数
1
解决办法
3011
查看次数

如何在模型中使用带有":through"关系的ActiveAdmin时修复Ransack未定义方法"_eq"?

我有一个Rails 4.0.1应用程序,使用gems activeadmin 1.0.0.pre和ransack 1.1.0.

使用ActiveAdmin,我有很多这样的错误:

NoMethodError in Admin::MyModel#action
Showing [...]/views/active_admin/resource/action.html.arb where line #1 raised:

undefined method `applied_boundaries_id_eq' for #<Ransack::Search:0x0..>
Extracted source (around line #1): insert_tag renderer_for(:index)
Run Code Online (Sandbox Code Playgroud)

每个未定义的方法都有一个"_eq"模式:

aws_instance_type_clients_id_eq
user_roles_id_eq
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

ruby-on-rails activeadmin ransack ruby-on-rails-4

8
推荐指数
1
解决办法
5188
查看次数

Ransack计数排序顺序错误

我正在使用Ransack Gem并通过计数器缓存进行计数排序.我的属性是一个整数.

我这样称呼它:

<%= sort_link(@q, :people_count, "PEOPLE") %>
Run Code Online (Sandbox Code Playgroud)

我得到的排序输出是:

[人民ASC]

1
2
0
0

[PEOPLE DESC]

0
0
2
1

我希望PEOPLE DESC能够展示:

2
1
0
0

任何人都可以帮忙吗?

--- 更新 -----

经过一个多小时的搜索,我觉得我越来越近了:

首先,我必须编辑我的观点:

<%= mycontact.people.count %>
Run Code Online (Sandbox Code Playgroud)

<%= mycontact.people_count %>
Run Code Online (Sandbox Code Playgroud)

这会将全零变为零.

现在我的排序输出是:

[PEOPLE DESC]



2
1

然后我做了一些挖掘,并在github上找到了这个问题的链接,这解释了你必须添加NULLS LAST.

所以我将以下代码添加到peoples_controller.rb:

@q.result.except(:order).order("#{@q.sorts.first.attr_name} #{@q.sorts.first.dir} NULLS LAST")
Run Code Online (Sandbox Code Playgroud)

我很兴奋,因为它工作,但然后重新启动我的服务器后收到以下错误:

未定义的方法`attr_name'代表nil:NilClass

sorting ruby-on-rails ransack ruby-on-rails-4

8
推荐指数
1
解决办法
1246
查看次数

Activeadmin:如何过滤匹配两个或多个搜索词的字符串

假设我有一个带有:email字段的User类.我们假设我使用activeadmin来管理用户.

制作一个返回与一个字符串匹配的电子邮件的过滤器,例如"smith",非常简单.在admin/user.rb,我只是包括该行

filter :email 
Run Code Online (Sandbox Code Playgroud)

这给了我一个完成工作的过滤器小部件.

但是,此过滤器不允许我搜索多个项的交集.我可以搜索包含"smith"的电子邮件,但不能搜索包含"smith"和".edu"的电子邮件.

Google告诉我,activerecord 在引擎盖下使用Ransack,而Ransack演示具有允许多个术语搜索的"高级"模式.

将多项搜索小部件放入activeadmin的最简单方法是什么?

理想情况下,我想要一个小部件,允许我输入smith .edusmith AND .edu过滤包含这两个术语的电子邮件.

activerecord ruby-on-rails activeadmin ransack

8
推荐指数
2
解决办法
2314
查看次数

使用元搜索或Ransack与Geocoder

我创建了一个提供搜索条件的表单:

    = search_form_for @q do |f|
  %h3
    Search:
  = f.label :category_id
  %br
  = f.collection_select :category_id_eq, Category.all, :id, :name, :include_blank => true
  %br
  = f.label "Sub-Category"
  %br
  = f.collection_select :subcategory_id_eq, Subcategory.all, :id, :name, :include_blank => true, :prompt => "select category!"
  %br
  = f.label "Contains"
  %br
  = f.text_field :title_or_details_cont
  %br
  = f.submit
Run Code Online (Sandbox Code Playgroud)

我希望能够根据Rails Geocoder gem的"Near"功能进行搜索.有没有人知道如何合并现有的范围,或者特别是如何在Meta Search或Ransack中使用"近"范围?

到目前为止,我的所有尝试都是徒劳的.

ruby-on-rails rails-geocoder ransack

7
推荐指数
1
解决办法
1938
查看次数