2016-11-07 2 views
0

Relationオブジェクトの代わりにModelオブジェクトを取得する理由を理解できません。 モデルActivity、コントローラのindexアクション:Ruby on rails:ActiveRecord :: Relationオブジェクトが必要ですが、モデル自体を取得します

clacc ActivitiesController < ApplicationController 
def index 
    @activities = Activity.my(current_user).filter(filtering_params) 
end 

:myが有効な範囲で、filtering_paramsは、モデル内のスコープと同じキーの名前のハッシュです。この方法filterモジュールで定義された:filtering_paramsが空のハッシュではありません

module Filterable 
    extend ActiveRecord::Concern 

    def filter(filtering_params) 
    results = self 
    filtering_params.each do |key, value| 
     results = results.public_send(key, value) 
    end 
    results 
    end 
end 

場合は、すべてが正常に動作して@activitiesは関係オブジェクトです。しかし、間違って空のハッシュがfilterメソッドの引数として渡された場合は、 "#Class ...のそれぞれの未定義メソッド"というビューでエラーが発生しています。 私はコンソールで試してみて、この場合は@activities.object_idActivity.object_idと同じものを見つけます。しかし、期待される関係オブジェクトがどのようにモデルクラス自体になるかを説明してください。コントローラで

filtering_params方法:

private 

def filtering params 
    params.merge!(completed: "false") unless params[:comleted] 
    params.merge!(select_all: "true") unless params[:select_all] 
    params.slice(:completed, :select_all) 
end 

モデル:

class Activity < ActiveRecord::Base 
include Filterable 
... 
scope :my, -> (user) { # scope here } 
scope :completed, # other scope 
scope :select_all, # other scope 
+0

あなたは、正確な全体のエラーメッセージを投稿することができますか? –

答えて

0

これは把握するのは難しいですが、私はあなたがresults = selfを割り当てているとき、あなたはクラスレベルでそれをやっていることと思います。これを例えばresults = self.where(nil)に変更すると、コレクションを指し示すことになります。

別の方法としては、句を追加することができます。

results = results.public_send(key, value) if value.present? 
関連する問題