首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >named_scopes和所有

named_scopes和所有
EN

Stack Overflow用户
提问于 2010-10-16 01:08:16
回答 1查看 211关注 0票数 0

我使用的是Rails 2.3.5。在我的应用程序中,用户可以预订特定日期的一个或多个时间段。我已经在我的插槽模型中定义了这个named_scope:

代码语言:javascript
复制
  # 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中:

代码语言:javascript
复制
  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 => {}添加到插槽模型中来解决这个问题,但对我来说这似乎是一个奇怪的解决方案。

你能帮我一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-16 01:16:28

默认的all方法返回一个数组(而不是named_scope :all返回的关联对象),因此不能对其调用for_day

但是,您可以直接在为其定义命名作用域的类上调用命名作用域,因此只需执行Slot.for_day(day) (不使用.all)就可以解决您的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3944471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档