我在我的一个模型中使用Paperclip:
class Event < ActiveRecord::Base
belongs_to :continent
belongs_to :event_type
scope :continent, lambda { |continent|
self.scoped.where('continent_id IN ( ? )', continent) unless continent.blank?
}
scope :event_type, lambda { |eventType|
self.scoped.where('event_type_id IN ( ? )', eventType) unless eventType.blank?
}
scope :in_date, lambda { |date|
self.scoped.where('(MONTH(`date_start`) BETWEEN ? AND ?) OR (MONTH(`date_end`) BETWEEN ? AND ?)', date[0],date[1],date[0],date[1]) unless date.blank?
}
has_attached_file :map, :styles => { :medium => "238x238>",
:thumb => "100x100>"
}
end
我对此操作发出了Ajax请求:
def filter
@events = Event.scoped
@events = @events.continent(params[:continents]) unless params[:continents].blank?
@events = @events.event_type(params[:event_type]) unless params[:event_type].blank?
@events = @events.in_date(params[:months]) unless params[:months].blank?
respond_with( @events )
end
我称这个网址为json答案。当我这样做时,我得到错误:“堆栈级别太深”
任何人都可以帮助我?
我的踪迹在这里:
答案 0 :(得分:1)
Stack depth too deep
表示您最终陷入无限循环。你的大陆范围是问题,因为你的方法和参数具有相同的名称,当你在大陆范围内调用参数时,你最终会得到一个无限循环。
另外,为什么不将范围编写为一系列类方法呢?我并不是使用lambdas传递范围中的参数的狂热粉丝,因为它使得阅读更难。以下是将范围作为类方法的示例
class Event < ActiveRecord::Base
belongs_to :continent
belongs_to :event_type
class << self
def continent(cont)
where('continent_id IN ( ? )', cont) unless cont.blank?
end
def event_type(eventType)
where('event_type_id IN ( ? )', event_type_id) unless event_type_id.blank?
end
def in_date(date)
where('(MONTH(`date_start`) BETWEEN ? AND ?) OR (MONTH(`date_end`) BETWEEN ? AND ?)', date[0],date[1],date[0],date[1]) unless date.blank?
end
end
has_attached_file :map, :styles => { :medium => "238x238>",
:thumb => "100x100>"
}
end