无法理解为什么我要获取Model对象而不是Relation对象。
模型Activity
,控制器索引操作:
clacc ActivitiesController < ApplicationController
def index
@activities = Activity.my(current_user).filter(filtering_params)
end
:my
是有效范围,filtering_params
是一个哈希,其键名与模型中的范围相同。模块中定义的方法filter
:
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
如果filtering_params
不是空哈希,一切正常,@activities
是Relation对象。但是如果错误地将空哈希作为参数传递给filter
方法,我开始在视图“为#Class的每个未定义的方法...”中得到一个错误。
我在控制台中尝试它并查找在这种情况下@activities.object_id
与Activity.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?