Использование current_user в моделях в Ruby on Rails - PullRequest
2 голосов
/ 10 ноября 2010

Я использую Devise, и он предлагает метод "current_user" в помощниках, так что я могу использовать его в представлениях и контроллерах.

Однако теперь я хотел бы получить доступ к методу "current_user" вмоделей.Вот что у меня сейчас есть в контроллерах.

def create
  set_email_address(params[:email_address])
  Comment.new(params[:content], set_email_address)
  # [snip]
end

private
def set_email_address(param_email)
  if current_user
    @email_address = current_user.email
  else
    @email_address = param_email
  end
end

Я бы хотел переместить «set_email_address» в модель, потому что я думаю, что это логика, и она должна передаваться в модели.Я планирую подключить этот метод к одному из обратных вызовов Rails.

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

Честно говоря, этот ответ в значительной степени подводит итог.Это не относится к модели логики вообще.Однако, как и в другом ответе, вы можете и должны передавать значение current_user из контроллера, если хотите использовать его внутри своей модели.

0 голосов
/ 10 ноября 2010

current_user - это данные, связанные с запросом или сессией, и я рекомендую вам не использовать их в модели. Это действительно то, для чего предназначен контроллер. Тем не менее, неплохо было бы убрать его из этого конкретного контроллера, если вы чувствуете, что это то, что должно быть доступно в других местах. В этом случае вы можете переместить его в ApplicationController или, что еще лучше, в модуль, который вы можете добавить в этот контроллер.

Вам все равно нужно отделить ваше поведение @email_address от решения о том, какой адрес электронной почты использовать, поскольку установка этой переменной экземпляра не имеет смысла в контексте модели.

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