Лучший способ заключить это - PullRequest
1 голос
/ 06 мая 2011

Вопрос должен быть простым, но я думаю, что лучший способ сделать это.Просто есть модель User и модель Quest.У пользователя есть один квест.Теперь я просто хочу проверить, не истек ли срок выполнения квеста пользователя.

Я думал, что нужно будет поставить истекший квест?в качестве примера метода квеста.Теперь я могу сделать что-то вроде:

current_user.quest.expired?

или даже создать делегата позже, чтобы сделать его следующим образом:

current_user.quest_expired?

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

Как бы вы это сделали?

Ответы [ 3 ]

4 голосов
/ 06 мая 2011

Обычно это делается с:

delegate :expired?, :to => :quest, :prefix => true, :allow_nil => true
1 голос
/ 06 мая 2011
current_user.quest.try(:expired?)
1 голос
/ 06 мая 2011

Обычно это решается следующим образом в Rails:

Определите оба метода:

current_user.quest.expired?
current_user.quest_expired?

и определите последний метод как:

def quest_expired?
  return nil unless quest
  quest.expired?
end

А затем вызвать quest_expired? если вы не уверены, что у пользователя есть квест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...