标签: ransack

Ransack 需要将 <Model> 关联明确列入可搜索列表

背景

我的代码一直在运行并工作,直到我安装了 gem“ipaddress”,但现在我之前创建的模型都出现以下错误

Ransack 需要将 <MODEL_NAME> 关联明确列入可搜索许可名单。

在模型中定义一个ransackable_associations类方法User ,注意您不希望搜索的项目(例如,encrypted_passwordpassword_reset_tokenowner其他敏感信息)。您可以使用以下内容作为基础:

class User < ApplicationRecord

  # ...

  def self.ransackable_associations(auth_object = nil)
    ["comments", "created_by", "favorites", "impressions_by_user", "updated_by", "user_group"]
  end

  # ...

The issue I have with this is I need a dynamic to do this instead of having to redo this for every single model that I have created.
Run Code Online (Sandbox Code Playgroud)

ruby rubygems ruby-on-rails ransack

2
推荐指数
1
解决办法
3991
查看次数

如何持久化搜索参数

我正在使用ransack根据用户的公司和活动/非活动参数来搜索用户。单独使用时效果很好,但我想同时使用两者。例如,如果我首先选择公司,然后选择活动/非活动用户,则公司名称应该保留。

其次,当我返回或再次点击用户时,ransack 中是否有一个工具可以保留这两个值?

更新 :

这是我的观点:

= search_form_for @search, url: search_users_path, method: :post, html: { class: 'sort' } do |f|
  = f.label 'company:'
  = f.select :company_id_eq,
  Company.where('is_inactive = false').collect {|c| [ c.name, c.id ] },
  {:include_blank => 'All company users'}, :'data-remote' => true, class: 'searchSelect searchUserSelect'

  %div.sort_users
    = f.label 'sort Users:'
    = f.select :deleted_eq,
    [raw("<option value= 0 selected=#{session[:deleted]}>Active Users</option><option value= 1>Inactive Users</option>")],
    {}, :'data-remote' => true, class: 'searchSelect searchUserSelect', style: "width: 205px;"
Run Code Online (Sandbox Code Playgroud)

这是我在控制器中的代码

@search = User.search(params[:q])
@users = …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails-3 ransack

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

与hansack(rails)进行OR

我有这两个输入:

<%= search_form_for @search, url: search_path, method: :post do |f| %>
  <%= f.text_field :thing_false %>
  <%= f.text_field :thing_null %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

当它们都被设置为"t"时,我执行了这个查询:

SQL: SELECT "stuffs".* FROM "stuffs" WHERE (("stuffs"."thing" = 'f' AND "stuffs"."thing" IS NULL))
Run Code Online (Sandbox Code Playgroud)

我怎么做到这样我才能执行此操作?

SQL: SELECT "stuffs".* FROM "stuffs" WHERE (("stuffs"."thing" = 'f' OR "stuffs"."thing" IS NULL))
Run Code Online (Sandbox Code Playgroud)

ransack文档并没有真正解决这个问题.这是我能找到的最接近的例子:

>> User.search(:first_name_or_last_name_cont => "Rya").result.to_sql
=> SELECT "users".* FROM "users"  WHERE ("users"."first_name" LIKE '%Rya%' 
   OR "users"."last_name" LIKE '%Rya%')
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ransack

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

Spree Commerce - 按 sku 搜索订单

我正在尝试在 Spree 后端的订单选项卡下创建一个搜索栏,您可以在其中输入产品 sku 并查找包含该产品的所有订单。

我使用 deface 插入“按 sku 搜索”字段。代码如下所示:

Deface::Override.new(:virtual_path => 'spree/admin/orders/index',
                 :name => 'search_by_sku',
                 :insert_bottom => "div.omega",
                 :text => "
                 <div class='field'>
                 <%= label_tag nil, Spree.t(:sku) %> 
                 <%=f.text_field :line_items_cont %>
                 </div>
                 ")
Run Code Online (Sandbox Code Playgroud)

line_items_cont 给我一个错误。

line_items_cont 是 ransack 用于搜索 line_items 的工具,它应该出现在结果中,但事实并非如此。这是返回的结果。

#<Spree::Order id: 225400, number: "R454575501", 
item_total: #<BigDecimal:7f83f7815998,'0.3194E3',18(18)>,
total: #<BigDecimal:7f83f78158f8,'0.3194E3',18(18)>,
state: "complete", adjustment_total: #<BigDecimal:7f83f7815808,'0.0',9(18)>,
user_id: nil, completed_at: "2014-01-30 07:34:38", bill_address_id: 173224,
ship_address_id: 171925, payment_total: #<BigDecimal:7f83f7815560,'0.3194E3',18(18)>,
shipping_method_id: nil, shipment_state: "shipped", payment_state: "paid", 
email: "test@email.com", special_instructions: "", created_at: "2014-01-30 05:00:49",
updated_at: …
Run Code Online (Sandbox Code Playgroud)

ruby json ruby-on-rails spree ransack

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

Ransack 搜索和翻译

我正在尝试对与翻译表有关联的模型进行搜查。

翻译由 globalize gem 管理。

问题是当我尝试在 :name 列的模型表中使用 ransack 进行搜索时,它什么也没显示,因为 :name 信息存储在另一个表中。

任何线索如何在关联翻译表中进行搜查搜索?我知道有可能使用 ransackers,但我不知道要放入哪些代码。

search translation ruby-on-rails ransack globalize

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

通过范围进行彻底搜索

我有一个模型Task,其范围名为done. ATask属于 aProject且属于 a User

我需要按用户已完成的项目来过滤用户task

simple_form_for @q do |form|
  form.input :tasks_done_project_id, collection: Project.ordered
Run Code Online (Sandbox Code Playgroud)

但使用“_done”不起作用。

我想到了一个掠夺者:

  ransacker :done do |parent|
    parent.done.table[:id]
  end
Run Code Online (Sandbox Code Playgroud)

但也不起作用。任何想法?

ruby sql ruby-on-rails simple-form ransack

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

RanSack 复杂的对象关系没有建立......(方法未找到错误)

首先是警告。我是一个总的 RoR n00b,但我有编程经验,所以我得到了基本的。我有一个正在构建的应用程序,我需要为其构建一个复杂的搜索引擎。基本布局是指南>> 个人资料>> 指导>> MentorAreas。下面是每个模型的代码,然后是我正在尝试构建的代码。我的问题是我似乎无法找出正确的对象名称来让搜索引擎搜索mentor_areas。

系统设置:

rails -v :: Rails 3.1.1
ruby -v :: ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]
RanSack :: ransack (0.5.8) from git://github.com/ernie/ransack.git (at master) 
Run Code Online (Sandbox Code Playgroud)

指导:

class Guide < User
end
Run Code Online (Sandbox Code Playgroud)

用户:(相关内容)

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Virtual attribute for authenticating by either username or email
  # This is in addition to a …
Run Code Online (Sandbox Code Playgroud)

associations ruby-on-rails-3.1 ransack

0
推荐指数
1
解决办法
3856
查看次数

我可以使用Ransack在多列中搜索相同的值吗?

Ransack gem可以为同一个值生成多列的SQL搜索吗?

例如,类似"名字或姓氏包含'詹姆斯'的用户".

ruby ransack

0
推荐指数
1
解决办法
1905
查看次数

外部属性的Ransack sort_link

我有一个belongs_to关系,我正在显示用户的名称就是这个实例.

但我想按用户名排序.

<th><%= sort_link @q, :user_id %></th>
Run Code Online (Sandbox Code Playgroud)

我将如何按用户名而不是user.id进行排序?

ruby-on-rails ransack

0
推荐指数
1
解决办法
3112
查看次数

在构建全局自动完成搜索时,如何在搜索栏中修复未定义的方法`form_with'?

尝试在我的rails应用程序中跨多个模型运行全局自动完成搜索并利用easy-autocomplete jquery库以及用于搜索的ransack gem时,我收到一个奇怪的错误.

具体来说,我相信错误是在我的导航栏页面中,因为当我尝试运行查询时出现此错误 - undefined method form_with for #<#<class:0x007f875a6f8b58>:0x007f87600e0aa8>

我决定劈开并切换form_tag for form_tag然后我在下面的行上得到一个错误我在下面undefined method text_field for nil:NilClass"列出了所有相关代码.非常感谢你的帮助.

Main_Controller.rb

class MainController < ApplicationController
def index
end
def search
@movies    = Movie.ransack(name_cont: params[:q]).result(distinct: true)
@directors = Director.ransack(name_cont: params[:q]).result(distinct: true)

respond_to do |format|
  format.html {}
  format.json {
    @movies    = @movies.limit(5)
    @directors = @directors.limit(5)
  }
end
end
end
Run Code Online (Sandbox Code Playgroud)

_navbar.html.erb

<%= form_with url: search_path, local: true, method: :get, html: { class: "form-inline my-2 my-lg-0" } do |form| %>
  <%= form.text_field :q, placeholder: "Search", …
Run Code Online (Sandbox Code Playgroud)

search jquery ruby-on-rails ransack ruby-on-rails-5

0
推荐指数
1
解决办法
1679
查看次数

自定义路线和搜查

我正在为我的模型使用自定义路线

resources :operatives, :controller => 'users' do
end
Run Code Online (Sandbox Code Playgroud)

我的用户/索引文件中有一个搜索表单,在我更改为自定义“操作员”路线之前该表单可以正常工作。

<% search_form_for @q do |f| %>
Run Code Online (Sandbox Code Playgroud)

这给出了错误

undefined method `users_path'
Run Code Online (Sandbox Code Playgroud)

如果我尝试通过向表单添加 url 来解决此问题:

<% search_form_for @q, url: operatives_path do |f| %>
Run Code Online (Sandbox Code Playgroud)

页面已加载,但表单现在未显示。

我应该如何配置我的搜索表单?

更新 - 您可以在以下位置看到 rake 路由输出:

https://gist.github.com/asecondwill/34831004b191fa3ac52353ead47c5a64

routes ruby-on-rails ransack

0
推荐指数
1
解决办法
1092
查看次数