【发布时间】:2016-05-11 03:51:34
【问题描述】:
当 with_role 为空时我可以过滤和搜索,但是当我想使用 with_role: supervisor or worker 搜索时我遇到了问题:
NoMethodError (undefined method `with_role' for #Array:0xb2499b54):
app/controllers/workers_controller.rb:38:in index'
如何修复或转换该数组?
这是我的代码 控制器
class WorkersController < ApplicationController
include WorkerHelper
def index
(@filterrific = initialize_filterrific(
User.where(role: %w(supervisor worker), company_id: current_user.company_id),
params[:filterrific],
select_options: {
with_role: [%w(Supervisor supervisor), %w(Técnico worker)],
search_query: ['Nro. DNI', 'Nombres', 'Apellidos']
},
persistence_id: false
)) || return
@workers = @filterrific.find.paginate(per_page: 10, page: params[:page])
end
end
型号
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :validatable, :trackable, :timeoutable
filterrific(available_filters: [:search_query, :with_role])
belongs_to :company
has_one :session
has_many :service_workers, foreign_key: :worker_id
has_many :services, foreign_key: :supervisor_id
has_many :work_services, through: :service_workers, source: :service
validates :document_number, presence: true, uniqueness: { case_sensitive: false }
scope :principal, -> { order(role: :desc) }
before_update :update_password_change_required, if: :encrypted_password_changed?
before_update :disable, if: :status_changed?
after_commit lambda {
if transaction_record_state(:new_record)
logger.info "CREATE User: #{inspect}"
elsif !(transaction_record_state(:new_record) || destroyed?)
logger.info "UPDATE User: #{inspect}"
end
}
scope :search_query, lambda { |params|
return nil if params.query.empty?
case params.option
when 'Nro. DNI'
select { |w| w.document_number.to_s.include? params.query.downcase }
when 'Nombres'
select { |w| w.first_name.downcase.include? params.query.downcase }
when 'Apellidos'
select { |w| w.last_name.downcase.include? params.query.downcase }
end
}
scope :with_role, lambda { |role|
select { |u| u.role == role }
}
end
Index.html.haml
.card.no-padding
= form_for_filterrific @filterrific do |f|
.items-right.search
%span Filtrar por:
.custom-select.blue-arrow
= f.select(:with_role, @filterrific.select_options[:with_role],{ include_blank: 'Todos' })
%span Buscar por:
= f.fields_for :search_query do |field|
.custom-select.blue-arrow
= field.select :option, @filterrific.select_options[:search_query]
= field.text_field :query, class: 'filterrific-periodically-observed form-control', id: 'search-text', placeholder: 'Ingrese DNI'
= link_to 'VER TODO', reset_filterrific_url, class: 'btn btn-blue-reverse'
= render partial: 'list', locals: { workers: @workers }
【问题讨论】:
标签: ruby-on-rails lambda filterrific