gpt4 book ai didi

ruby-on-rails - rails 3.0 中的多个作用域

转载 作者:数据小太阳 更新时间:2023-10-29 08:01:40 24 4
gpt4 key购买 nike

我是 Rails 的初学者,我对范围有疑问。

我的类(class)有 2 个作用域:

class Event < ActiveRecord::Base
belongs_to :continent
belongs_to :event_type

scope :continent, lambda { |continent|
return if continent.blank?
composed_scope = self.scoped
composed_scope = composed_scope.where('continent_id IN ( ? )', continent).all
return composed_scope
}

scope :event_type, lambda { |eventType|
return if eventType.blank?
composed_scope = self.scoped
composed_scope = composed_scope.where('event_type_id IN ( ? )', eventType).all
return composed_scope
}

结束

在我的 Controller 中,我想同时使用这两个示波器。我做到了:

def filter
@event = Event.scoped
@event = @event.continent(params[:continents]) unless params[:continents].blank?
@event = @event.event_type(params[:event_type]) unless params[:event_type].blank?

respond_with(@event)
end

但是我不工作,我有这个错误:

 undefined method `event_type' for #<Array:0x7f11248cca80>

这是因为第一个作用域返回一个数组。

我该怎么做才能让它发挥作用?

谢谢!

最佳答案

你不应该在你的范围内附加'.all':

它通过触发 SQL 查询将可链接的 ActiveRelation 转换为数组。

所以简单地删除它。

奖励:

一些重构:

scope :continent, lambda { |continent|   
self.scoped.where('continent_id IN ( ? )', continent) unless continent.blank?
}

关于ruby-on-rails - rails 3.0 中的多个作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7007547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com