Я недавно подал заявку, в которой есть статьи и т. Д., С системой комментариев / модерации сверху.Есть одна из трех вещей, которые происходят, когда пользователь оставляет комментарий.
Во-первых, если он зарегистрированный пользователь и вошел в систему через Devise, его комментарий помечается как «2» и публикуется.сразу.Если они являются анонимным пользователем с ранее одобренным комментарием с соответствующим адресом электронной почты, комментарий получает статус «1» и помещается в очередь модерации для утверждения.И если пользователь совершенно новый и его электронная почта отсутствует в системе, этот комментарий получает статус «0», и электронное письмо отправляется в его почтовый ящик, чтобы перейти по ссылке, чтобы подтвердить его электронную почту.После всего этого отображается соответствующее уведомление / флеш-сообщение.
У меня все это работает нормально, но почти все логические и переменные определения в контроллере делаются, что делает действие создания очень толстым.В интересах изучения передового опыта и соглашения «толстая модель, тощий контроллер», я пытаюсь перенести какую-то логику в модель Comment, особенно ту часть, которая выясняет, вошли ли они в систему или что.Итак, гипотетически, что-то подобное в модели ...
attr_accessor :message
before_create :poster_type
def poster_type
if current_user
self.status = 2
self.message = 'Your comment has been posted.'
elsif Comment.find_by_mail(self.mail, :conditions => { :status => [1,2]}).present?
self.status = 1
self.message = 'Your comment has been sent for moderation.'
else
self.status = 0
self.message = 'This is a new email, please confirm...'
end
end
Проблема в том, что вы не можете использовать метод Devise current_user (или другие, такие как user_signed_in ?, и т. Д.), По-видимому, в модели.Каждый ответ, который я исследовал по этому вопросу, бесполезно говорит о том, что дело не в том, чтобы получить доступ к значениям current_user и т. Д.
Однако мне не обязательно предоставлять модели информацию пользователя (так как яя видел все другие потоки, которые пытались это сделать), все, что мне нужно, чтобы метод в модели, чтобы выяснить, просто ли они вошли или нет.
Кроме того, если вы не можете использовать current_user (или другие методы обнаружения пользователя) в модели, тогда у вас не будет другого выбора, кроме как определить всю логику в контроллере, и разве это не плохая практика?Итак, если это возможно, как я могу сделать эту логику в модели?Или мне просто оставить контроллер жирным?