named_scopes и все - PullRequest
       7

named_scopes и все

0 голосов
/ 15 октября 2010

Я на Rails 2.3.5. Внутри моего приложения пользователь может забронировать один или несколько временных интервалов на определенный день. Я определил этот named_scope в моей модели слотов:

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

Я использую это, чтобы получить все «временные интервалы», доступные за день. Однако у меня есть страница, на которой я хотел бы увидеть все забронированные слоты (другими словами, слоты других пользователей).

Поэтому, когда я вызываю URL /slots, я хотел бы получить каждый забронированный слот, когда вместо этого я вызываю / user / 2 / slots, мне нужны только те, что для пользователя 2.

Я добавил этот маршрут map.resources :users, :has_many => :slots в мой route.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, но мне кажется это странным решением.

Не могли бы вы мне помочь?

1 Ответ

2 голосов
/ 15 октября 2010

Метод all по умолчанию возвращает массив (в отличие от объекта ассоциации, который возвращается вашим named_scope :all), поэтому вы не можете вызвать for_day для него.

Однако вы можете вызывать именованные области непосредственно в классе, для которого вы их определили, поэтому простое выполнение Slot.for_day(day) (без .all) решит вашу проблему.

...