[英]Rails4: Get an ActiveRecord::Relation from a model or an already chained relation
[英]Ruby on rails: expect ActiveRecord::Relation object but get Model itself
无法理解为什么我得到模型对象而不是关系对象。 模型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
这很难弄清楚,但是我猜想当您分配results = self
,您是在课程级别进行的。 例如,如果将其更改为results = self.where(nil)
, results = self.where(nil)
指向一个集合。
或者,您可以添加以下子句:
results = results.public_send(key, value) if value.present?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.