Ruby on rails:期望ActiveRecord :: Relation对象,但获取Model本身

时间:2016-11-07 18:19:51

标签: ruby-on-rails activerecord

无法理解为什么我要获取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_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

1 个答案:

答案 0 :(得分:0)

这很难搞清楚,但我想当你分配results = self时,你是在课堂上做的。如果您将其更改为,例如results = self.where(nil),则您将指向一个集合。

或者,您可以添加以下内容:

results = results.public_send(key, value) if value.present?