标签: ransack

Rails&Ransack - 根据模型中的定义进行排序/搜索

比方说,我有一个带start_date和的事件length(作为表示天数的整数).

在这个模型中,我定义end_datestart_date + length.days很简单的,你会想到:

def end_date
  start_date + length.days
end
Run Code Online (Sandbox Code Playgroud)

一切都可以在模板中正常工作,我可以用它event.end_date来显示开始日期加上多少天长度设置为,但是,我现在想要使用Ransack在结束日期之前订购事件.

start_date看起来像这样的排序链接:<%= sort_link @q, :start_date, "Start" %>

如果我为end_date(<%= sort_link @q, :end_date, "End" %>)尝试相同,它很遗憾地失败,因为我认为它正在寻找end_date表中的列而没有找到它.

我只是愚蠢,还是我想做一些Ransack根本不做的事情?

ruby-on-rails ruby-on-rails-3.2 ransack

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

搜索开始日期和结束日期之间的记录以进行搜索

嗨我正在使用ransack + kalendae_assets gem来搜索开始日期和结束日期之间的记录,我通过引用https://github.com/ernie/ransack/blob/master/lib/ransack/constants.rb来使用ransack PREDICATES

这是我的代码

<%= search_form_for @search, url: guest_search_rooms_path, html: {:method =>:post} do |f| %>
  <%= f.label :start_date_eq , "Start Date"%>   
  <%= f.text_field :start_date_eq, class: 'release_date' %>     

  <%=f.label :end_date_eq, "End Date" %>   
  <%= f.text_field :end_date_lteq, class: 'release_date' %>     
  <%= f.submit "search" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

rooms.controller

def guest_search 

  @search = Room.search(params[:q])
  @roome = @search.result(:distinct => true)
  @room= @roome.where("status IS ?", true).order("room_type_id desc")

  #@room = @search.result(:distinct => true)
 end 
Run Code Online (Sandbox Code Playgroud)

但是当我输入开始和结束日期时,它不会搜索我该怎么做

ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 ransack

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

eq_any用于布尔属性 - ransack

我的模型中有一个布尔属性(已发布),我book希望使用该值的复选框过滤所有书籍.

class Book < ActiveRecord::Base
  attr_accessible :published
end
Run Code Online (Sandbox Code Playgroud)

这意味着,我想是这样eq_any,但对于truefalse.有没有办法用Ransack做到这一点?

UPDATE

我希望用户能够只选择出版的书籍,只选择未出版的书籍和任何书籍.所以单个复选框不会.

ruby-on-rails-3 ransack

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

Rails + ActiveAdmin - 使用ransacker进行过滤会抛出错误PG :: SyntaxError:ERROR:语法错误在","附近

我对Ruby的项目on Rails的4.1.4,使用activeadmin 1.0.0.pre from git://github.com/activeadmin/activeadmin,pg 0.17.1和PostgreSQL 9.3

在项目中我有这些模型:

  1. class User has_one :account

  2. class Account belongs_to :user has_many :project_accounts has_many :projects, :through => :project_accounts

  3. class Project # the project has a boolean attribute 'archive' has_many :project_accounts

  4. class ProjectAccount belongs_to :account belongs_to :project

我有一个任务是在索引页面上实现一个名为"by_active_projects"的ActiveAdmin过滤器,因此它必须显示已定义活动项目数的用户,这意味着这样的项目具有archive == false.例如,如果我在过滤器中键入"2",则必须找到具有正好2个活动项目的此类帐户.

现在我在ActiveAdmin中注册了"帐户"资源,并在admin/account.rb我添加的内部filter :by_active_projects_eq

之后我having_active_projects为Account模型(models/account.rb)定义了一个范围:

scope :having_active_projects, ->(number) { joins(:projects).where("projects.archive = ?", false).having("count(projects) = ?", number).group("accounts.id") }
Run Code Online (Sandbox Code Playgroud)

下一步,我为Account模型定义了一个ransacker,如下所示:

ransacker :by_active_projects, formatter: proc{ |v|
    data = Account.having_active_projects(v).map(&:id)
    data …
Run Code Online (Sandbox Code Playgroud)

ruby postgresql activeadmin ransack ruby-on-rails-4

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

在Ransack中组合搜索谓词

如何实现相同的:name_eq_or_description_cont组合_eq_cont谓词到同一个搜索键,以便我可以在表单中创建一个搜索字段:

<%= search_field_tag :item, :name_eq_or_description_cont %>
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ransack

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

Ransack在应用程序布局Rails中搜索Ajax

我有一个Rails 4.2应用程序,其中我使用Ransack与Geocoder混合进行搜索.我想在搜索中使用Ajax(remote:true)来避免页面加载和更改URL.

当我在索引视图中实现它时,它工作得很好,但我想将搜索框抽象到应用程序布局文件,因此它可以在站点范围内使用,而不是仅在索引视图上.当我这样做(参见代码示例)我能够搜索得很好,但问题是我似乎无法弄清楚如何获得Ajax/Remote:True工作.这是我的代码:

application.html.erb

  <%= search_form_for(@search, url:"/resources", :method => :get, remote: true) do |f| %>
     <%= text_field_tag :location, params[:location], placeholder: "Houston, TX", class: "input-sm form-control" %>
      <%= f.submit "Find", class:'btn btn-sm btn-info' %>
  <% end %>
Run Code Online (Sandbox Code Playgroud)

application_controller.rb

  before_action :build_search
  private
  def build_search
    if params[:location].present?
        @search = Resource.near(params[:location], 100).search(params[:q])
      else
            @search = Resource.search(params[:q])
      end
  end
Run Code Online (Sandbox Code Playgroud)

资源/ index.js.erb的

$("#mapdisplay").html("<%= escape_javascript render("map") %>");
$("#results").html("<%= escape_javascript render("results") %>");
Run Code Online (Sandbox Code Playgroud)

资源/ index.html.erb

<div id="mapdisplay">
    <%= render 'map' %>
</div>
<div id="results">
    <%= render 'results' %>
</div> …
Run Code Online (Sandbox Code Playgroud)

ajax ransack ruby-on-rails-4

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

没有 Ransack::Search 对象被提供给 search_form_for

我意识到其他人已经问过这个错误,但它与不同的情况有关。

我为 rails 4 添加了 Ransack gem 并捆绑安装:

gem "ransack", github: "activerecord-hackery/ransack", branch: "rails-4"
Run Code Online (Sandbox Code Playgroud)

我还编辑了我的控制器如下(recipes_controller):

def index
if params[:tag]
  @all_recipes = Recipe.tagged_with(params[:tag])
else
  @all_recipes = Recipe.all
end
if signed_in?
  @user_recipes = current_user.recipes.order("created_at DESC").paginate(page: params[:page], :per_page => 10)
end
if params[:q]
  @q = Recipe.search(params[:q])
  @all_recipes = @q.result(distinct: true)
end
end
Run Code Online (Sandbox Code Playgroud)

然后我在表格中添加如下(食谱/索引):

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

我收到以下错误

No Ransack::Search object was provided to search_form_for! …
Run Code Online (Sandbox Code Playgroud)

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

5
推荐指数
2
解决办法
6585
查看次数

通过搜索将一个属性与另一个属性进行比较

Ransack允许我使用属性,谓词和值来构建条件.我无法找到有关如何将一个属性与另一个属性进行比较的任何文档.例如,我如何创建条件:

WHERE column_a < column_b
Run Code Online (Sandbox Code Playgroud)

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

5
推荐指数
1
解决办法
300
查看次数

Rails时间选择仅显示小时?

如何选择Rails时间以仅显示没有分钟的小时部分?基本上我想要的是用start_time和显示时间过滤器end_time并使用Ransackgem来过滤查询.

# db
create_table "schedules"
  t.time "start_time"
  t.time "end_time"

# controller
@q = Schedule.ransack(params[:q])
@q.sorts = ['date asc', 'start_time asc', 'end_time asc'] if @q.sorts.empty?
@schedules = @q.result.includes(:klass, :partner, :city)

#view
<%= search_form_for @q do |f| %>
  <%= f.label :start_time_gteq, "Start time" %>
  <%= f.select_hour :start_time_gteq, start_hour: 5, end_hour: 23 %>

  <%= f.submit "Filter" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

undefined method `select_hour' for #<Ransack::Helpers::FormBuilder:0x007fb85217e000>
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

<%= f.time_select :start_time_eq, start_hour: 5, end_hour: 23 %>
Run Code Online (Sandbox Code Playgroud)

......但它显示了分钟部分.我检查了API, …

ruby-on-rails ransack drop-down-menu ruby-on-rails-4

5
推荐指数
1
解决办法
2051
查看次数

rails ransack gem搜索json列

我有一个字段作为json列,我必须搜索该列内的所有电话值,我已搜索它,我没有找到任何使用搜索的文件.是否可以使用ransaack搜索json列?我已经使用搜索搜索其他字段,所以我必须使用搜索或可以结合两个结果的东西

我的json专栏看起来像这样

{"phone1"=>"", "relationship_type1"=>"", "relationship_name1"=>"", "phone2"=>"", "relationship_type2"=>"", "relationship_name2"=>"", "phone3"=>"", "relationship_type3"=>"", "relationship_name3"=>"", "phone4"=>"", "relationship_type4"=>"", "relationship_name4"=>""}
Run Code Online (Sandbox Code Playgroud)

phone1,phone2,3,4应该是searcheable.

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

5
推荐指数
1
解决办法
1530
查看次数