我的代码一直在运行并工作,直到我安装了 gem“ipaddress”,但现在我之前创建的模型都出现以下错误
Ransack 需要将 <MODEL_NAME> 关联明确列入可搜索许可名单。
在模型中定义一个ransackable_associations类方法User
,注意您不希望搜索的项目(例如,encrypted_password、password_reset_token或owner其他敏感信息)。您可以使用以下内容作为基础:
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) 我正在使用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) 我有这两个输入:
<%= 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) 我正在尝试在 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) 我正在尝试对与翻译表有关联的模型进行搜查。
翻译由 globalize gem 管理。
问题是当我尝试在 :name 列的模型表中使用 ransack 进行搜索时,它什么也没显示,因为 :name 信息存储在另一个表中。
任何线索如何在关联翻译表中进行搜查搜索?我知道有可能使用 ransackers,但我不知道要放入哪些代码。
我有一个模型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)
但也不起作用。任何想法?
首先是警告。我是一个总的 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) Ransack gem可以为同一个值生成多列的SQL搜索吗?
例如,类似"名字或姓氏包含'詹姆斯'的用户".
我有一个belongs_to关系,我正在显示用户的名称就是这个实例.
但我想按用户名排序.
<th><%= sort_link @q, :user_id %></th>
Run Code Online (Sandbox Code Playgroud)
我将如何按用户名而不是user.id进行排序?
尝试在我的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) 我正在为我的模型使用自定义路线
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
ransack ×11
ruby ×5
search ×2
associations ×1
globalize ×1
jquery ×1
json ×1
routes ×1
rubygems ×1
simple-form ×1
spree ×1
sql ×1
translation ×1