2010-11-10 4 views
2

Я использую Devise и предлагает метод current_user в помощниках, чтобы я мог использовать его в представлениях и контроллерах.Использование «current_user» в моделях Ruby on Rails

Однако теперь я хотел бы получить доступ к методу «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.

+1

Почему бы не передать 'current_user' в' set_email_address' на модели вместе с 'params [: email_address]', который вы уже проходите? –

ответ

2

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

0

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

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

Смежные вопросы