繁体   English   中英

Ruby on Rails:期望使用ActiveRecord :: Relation对象,但要获取Model本身

[英]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_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

这很难弄清楚,但是我猜想当您分配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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM