Как пометить сообщение как просмотренное? - PullRequest
1 голос
/ 20 февраля 2011

У меня есть модель, Post, в которой есть поле с именем is_viewed, которое ложно при создании Post.

Каков наилучший способ установить is_viewed в значение true, когда сообщение показывается пользователю?

В настоящее время я должен сделать это:

* * 1010

Чтобы загрузить сообщение только один раз, я мог бы сделать это:

if !@post.viewed?
  if @post.update_attribute(:is_viewed, true)
    #simply update the viewed to true, "in memory" so that
    #the view's erb can use the correct value of the "is_viewed" variable
    @post.viewed = true
  end
end

Но правильно ли это делать?

1 Ответ

3 голосов
/ 20 февраля 2011

Ваш рубин не очень рубиновый. Обычно никто не использует is_ в качестве префикса, поскольку ruby ​​позволяет именам методов заканчиваться знаком вопроса. Предполагая, что ваше поле является логическим значением, вы можете использовать @post.viewed? как сокращение.

В любом случае, чтобы ответить на ваш вопрос, из-за ActiveRecord :: Dirty действительно нет необходимости проверять текущее состояние. Если вы позвоните @post.save в сообщении, для которого @post.changed? имеет значение false, запрос на обновление не будет выполнен. Итак:

@post = current_user.posts.find(params[:id])
@post.viewed = true
@post.save

Вы не говорите, почему ваш код перезагружает пост, поэтому я собираюсь предположить, что это фальшивка. В Ruby есть ключевое слово unless, поэтому вы можете заменить конструкции типа if !expr на unless expr.

Кроме того, код ruby ​​выглядит лучше всего с двумя пробелами: -)

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