我使用的是Rails 2.3.5。在我的应用程序中,用户可以预订特定日期的一个或多个时间段。我已经在我的插槽模型中定义了这个named_scope:
# day time slots
named_scope :for_day, lambda { |day|
if !day.blank?
{ :conditions => ['day_of_week = ?', day] }
end
}我用它来检索一天内所有可用的“时隙”。然而,我有一个页面,我想看到所有预订的插槽(换句话说,其他用户的插槽也)。
因此,当我调用/slots url时,我希望获得每个预订的时隙,而我调用/ user / 2 / slot时,我只需要用户2的那些时隙。
我将此路由map.resources :users, :has_many => :slots添加到我的routes.rb中,并将此代码添加到我的slots_controller.rb中:
def index
if params[:user_id]
@slots = User.find(params[:user_id]).slots
else
@slots = Slot.all
end
end请注意,用户还可以单独查看另一个用户的预订时段。
现在,当我尝试对Slot.all数组使用上面名为:for_day的作用域时,我得到了:
undefined method for_day for #<Array:0x104441f60>
我可以将named_scope :all, :conditions => {}添加到插槽模型中来解决这个问题,但对我来说这似乎是一个奇怪的解决方案。
你能帮我一下吗?
发布于 2010-10-16 01:16:28
默认的all方法返回一个数组(而不是named_scope :all返回的关联对象),因此不能对其调用for_day。
但是,您可以直接在为其定义命名作用域的类上调用命名作用域,因此只需执行Slot.for_day(day) (不使用.all)就可以解决您的问题。
https://stackoverflow.com/questions/3944471
复制相似问题