【问题标题】:named_scopes and allnamed_scopes 和所有
【发布时间】:2010-10-15 17:08:15
【问题描述】:

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

  # day time slots
  named_scope :for_day, lambda { |day|
    if !day.blank?
      { :conditions => ['day_of_week = ?', day] }
    end
  }

我用它来检索一天中所有可用的“时隙”。 但是我有一个页面,我想查看所有预订的插槽(换句话说,其他用户的插槽)。

因此,当我调用 /slots url 时,我想获取每个预订的插槽,而当我调用 /user/2/slots 时,我只需要用户 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

请注意,用户也可以单独查看其他用户的预订时段。

现在,当我尝试将上面的 :for_day 命名范围用于 Slot.all 数组时,我得到:

undefined method for_day for #<Array:0x104441f60>

我能够修复它,将 named_scope :all, :conditions => {} 添加到 Slot 模型,但这对我来说似乎是一个奇怪的解决方案。

你能帮帮我吗?

【问题讨论】:

    标签: ruby-on-rails named-scope


    【解决方案1】:

    默认的all 方法返回一个数组(与您的named_scope :all 返回的关联对象相反),因此您不能在其上调用for_day

    但是,您可以直接在为它们定义的类上调用命名范围,因此只需执行 Slot.for_day(day)(不带 .all)即可解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2011-01-12
      • 2011-02-16
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多