我有一个 Rails 4.0.0 应用程序并希望包含 has_scope gem。
非常简单直接的资源:
模型:
class Thing < ActiveRecord::Base
resourcify
...
belongs_to :client
validates_presence_of :name
scope :by_client, -> client { where(:client => client)}
scope :by_name, -> name { where(:name => name)}
控制器:
class ThingsController < ApplicationController
include Pundit
before_filter :authenticate_user!
before_action :set_thing, only: [:show, :edit, :update, :destroy]
after_action :verify_authorized, :except => [:index, :edit]
has_scope :by_client, :type => :integer
has_scope :by_name
....
def index
@things = apply_scopes(Thing).all
puts current_scopes
end
current_scopes 始终是一个空哈希,并且 Thing.all 被传递给视图,无论应用什么范围。范围本身没问题,并正确返回过滤后的记录参数在那里:例如:
Started GET "/things?client=113" for 127.0.0.1 at 2014-07-26 16:07:32 +0200
Processing by ThingsController#index as HTML
Parameters: {"client"=>"113"}
这个设置有什么问题。我没有收到任何警告,没有缺少任何方法等。只是完整的清单。我是否错过了一些配置选项或任何东西?
明白了,在这种情况下,范围适用于表格列。这修复了它:
scope :by_client, -> client { where(:client_id => client)}
而不是一个
has_scope :by_client
和参数
{"by_client"=>"113"}
够了