标签: ransack

使用元搜索或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
查看次数

如何在委派字段上使用ransack

我有以下型号

class Position < ActiveRecord::Base

  belongs_to :position_name
  delegate :name, to: :position_name
Run Code Online (Sandbox Code Playgroud)

而这个搜索表单

  = search_form_for @search, url: '#', method: 'GET', html: {id: nil, class: "term_search_form"}  do |f|
      = f.text_field :name_cont, class: 'search-query', id: nil, placeholder: t('search')
Run Code Online (Sandbox Code Playgroud)

我仍然收到此错误消息:

undefined method `name_cont' for #<Ransack::Search:0x007f97187c5b80>
Run Code Online (Sandbox Code Playgroud)

我认为这是因为委托的方法名称.

如何在委派方法上使用ransack?

ruby-on-rails ransack

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

Ransack和act-as-taggable-on问题

我有一个使用act-as-taggable-on的几个分类法的模型

class Film < ActiveRecord::Base
  attr_accessible :mood_list, :genre_list, :tag_list, :country_list
  acts_as_taggable_on :countries, :genres, :moods, :tags
end
Run Code Online (Sandbox Code Playgroud)

我试图让Ransack搜索找到有任何心情和完全匹配国家的记录.但它返回了0条记录,而我有匹配的记录,请参阅:

Film.search({:moods_name_in=>['happy', 'snooze']}).result.count => 2    
Film.search({:countries_name_eq=>'USA'}).result.count => 2
Film.search({:moods_name_in=>['happy', 'snooze'], :countries_name_eq=>'USA'}).result.count => 0
Run Code Online (Sandbox Code Playgroud)

它什么都没有!但我肯定有一个:

>> f.countries
[#<ActsAsTaggableOn::Tag id: 13, name: "USA">]
>> f.moods
[#<ActsAsTaggableOn::Tag id: 17, name: "active">, #<ActsAsTaggableOn::Tag id: 16, name: "psyched">, #<ActsAsTaggableOn::Tag id: 15, name: "happy">]
The SQL generated is:
(3.2ms)  SELECT COUNT(DISTINCT "films"."id") FROM "films" LEFT OUTER JOIN "taggings" ON "taggings"."taggable_id" = "films"."id" AND taggings.context = ('moods') AND "taggings"."taggable_type" = 'Film' …
Run Code Online (Sandbox Code Playgroud)

activerecord has-and-belongs-to-many acts-as-taggable-on arel ransack

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

Ransack,Postgres - 从关联表中对列进行排序,使用distinct:true

我有一个使用Ransack宝石的应用程序,我将它从Mysql转换为Postgres.

在排序列来自关联表并且distinct选项设置为true的实例中,Postgres会抛出此错误:

PG::InvalidColumnReference: ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list
Run Code Online (Sandbox Code Playgroud)

Ransack github页面说,在这种情况下,"你是靠自己的."

什么是最好的 - 任何! - 处理这种情况的策略?

q = Contact.includes(:contact_type).search
q.sorts = ['contact_type_name asc']
q.result(distinct: true)
PG::InvalidColumnReference: ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list
Run Code Online (Sandbox Code Playgroud)

谢谢!

ruby ruby-on-rails rails-postgresql ransack ruby-on-rails-4

7
推荐指数
2
解决办法
1901
查看次数

如何在Ransack获得条件组?

我在Ransack中使用高级搜索,它具有默认AND.我把它作为OR通过放入.try(:merge,m:'或'))

@search = Data.search(params[:q].try(:merge, m: 'or'))
Run Code Online (Sandbox Code Playgroud)

但我无法像在Ransack Demo中显示的条件组那样得到AND/OR下拉http://ransack-demo.herokuapp.com/users/advanced_search

在此输入图像描述

如何做到这一点不幸的是Ransack wiki没有提及它.

我们的代码

data_controller.rb

def search

    @search = Data.search(params[:q])
    @datum = @search.result(:distinct=>true).paginate(page: params[:page], per_page: 10)

    if params[:q].nil?
        @datum = Prospect.where(:id => 0).paginate(page: params[:page], per_page: 10)
    end

    @page = params[:page] || 0
    @pids = @search.result(:distinct=>true).pluck(:id)

    @search.build_condition
    # @search.build_grouping unless @search.groupings.any? (I have tried this code too but this gives an error)
end
Run Code Online (Sandbox Code Playgroud)

的routes.rb

resources :data do
    collection do
      get :search
      post :search, to: 'data#search'
    end
end
Run Code Online (Sandbox Code Playgroud)

data.html.erb

<script type="text/javascript">
    var ids = …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-3 ransack ruby-on-rails-4

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

可以思考 - 狮身人面像搜身一起工作吗?

我们的项目目前正在使用Ransack,我们正在考虑介绍Thinking-Sphinx.但是他们都使用搜索关键字.有没有办法在同一个项目中使用Thinking-Sphinx和Ransack?

预先感谢.

ruby-on-rails thinking-sphinx ransack

6
推荐指数
1
解决办法
776
查看次数

对非属性使用Ransack sort_link

我在我的rails项目中使用Ransack的sort_link来显示我的支付模型的费用列表.但是,'fee_amount'不是支付模型的属性,而是账单模型的类方法(属于支付).我现在拥有的是:

<%= sort_link @search,:bill_fee_amount,"便利费"%>

应该访问当前付款账单并在该账单上调用'fee_amount'方法,该方法进行一些计算并返回浮点数.这是我希望搜索的浮标.

可以这样做,还是我只能根据我正在处理的模型的属性进行排序?

ruby-on-rails-3 ransack

6
推荐指数
1
解决办法
4807
查看次数

用输液器进行“或”操作

一个基本的问题,但是我在项目页面Wiki中找不到清晰的内容。我有以下代码:

field = "secre"
Position.search( {:description_cont => field, :code_cont => field}).result(:distinct => true).to_sql
 => "SELECT DISTINCT `positions`.* FROM `positions`  WHERE ((`positions`.`description` LIKE '%secre%' AND `positions`.`code` LIKE 0))"
Run Code Online (Sandbox Code Playgroud)

但是我的查询应该是这样的:

 => "SELECT DISTINCT `positions`.* FROM `positions`  WHERE ((`positions`.`description` LIKE '%secre%' OR `positions`.`code` LIKE 0))"
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。提前致谢

ruby-on-rails ransack

6
推荐指数
1
解决办法
4642
查看次数

使用Ransack在Enum字段上搜索

我有一张桌子,'工作'有一个enum字段'status'.status具有以下枚举集:

enum status: [ :draft, :active, :archived ]
Run Code Online (Sandbox Code Playgroud)

使用ransack,如何过滤表格,比如所有活动记录?

ruby ransack

6
推荐指数
2
解决办法
2818
查看次数

自定义掠夺者参数的表单助手 - Rails

根据Ransack文档,可以将自定义参数传递给 ransacker方法:

class Person < ApplicationRecord
  ransacker :author_max_title_of_article_where_body_length_between, args: [:parent, :ransacker_args] do |parent, args|
    min, max = args
    query = <<-SQL
      (SELECT MAX(articles.title)
       FROM articles
       WHERE articles.person_id = people.id
         AND CHAR_LENGTH(articles.body) BETWEEN #{min.to_i} AND #{max.to_i}
       GROUP BY articles.person_id
      )
    SQL
    Arel.sql(query)
  end
end
Run Code Online (Sandbox Code Playgroud)

在同一文档中甚至还有一个传递自定义参数的示例:

Person.ransack(
  conditions: [{
    attributes: {
      '0' => {
        name: 'author_max_title_of_article_where_body_length_between',
        ransacker_args: [10, 100]
      }
    },
    predicate_name: 'cont',
    values: ['Ransackers can take arguments']
  }]
)
Run Code Online (Sandbox Code Playgroud)

但是,没有关于如何从视图传递自定义参数的文档,因为似乎没有search_form_for帮助程序可以做到这一点。

有没有一种方法可以通过表单传递这些参数,而不需要解析控制器中的参数来执行示例中指出的搜索?

ruby-on-rails ransack ruby-on-rails-5

6
推荐指数
0
解决办法
395
查看次数