Ваш рубин не очень рубиновый. Обычно никто не использует 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 выглядит лучше всего с двумя пробелами: -)