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"}
十分です