Rails не сохранит логическое «скрытое» значение, но сохранит другие значения - PullRequest
0 голосов
/ 07 ноября 2010

Я немного новичок в Rails, и у меня есть простое приложение с некоторыми историями.Я хочу, чтобы эта функция легко скрывала истории, которые я не хочу показывать прямо сейчас.Другие функции, настроенные таким же образом, работают нормально, кроме этой с логическим значением.

  def hide
    @story = Story.find(params[:id])
    @story.hidden = true

    if @story.save
      redirect_to :controller => 'pages', :action => 'home'
    else
      redirect_to :controller => 'stories', :action => 'show', :id => @story.id
    end
  end

По какой-то причине, когда эта функция запускается, она не обновляет атрибут "hidden" в Story, ноstory.save возвращает true (он выполняет первую часть оператора if).Я делаю что-то неправильно, чтобы установить @ story.hidden = true?Я использую sqlite, если это имеет значение.Спасибо!

Ответы [ 3 ]

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

Ну, во-первых, почему вы используете настраиваемое действие? Это должно войти в действие обновления в контроллере, и вы должны передать логическое значение через форму.

Теперь, для вашего конкретного вопроса, проверьте, изменила ли переменная @story объект, но сделав это:

logger.debug @story.changed?

Если это возвращает true, это означает, что запись должна быть обновлена, и вы должны просмотреть журнал, чтобы убедиться, что на самом деле является оператором UPDATE. Возможно, вам следует опубликовать это здесь.

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

Использовать update_attributes!: он не пропустит проверку и выдаст исключение при ошибках.
Также рассмотрите возможность использования rescue, так как Story.find(), а также update_attributes! может дать сбой.

def hide
  @story = Story.find(params[:id]).update_attributes!(:hidden => true)
  redirect_to :controller => 'pages', :action => 'home'
end
0 голосов
/ 07 ноября 2010

Если это будет просто обновлять логический атрибут всегда до true, тогда вы можете сделать это так:

def hide
    @story = Story.find(params[:id])
    @story.update_attribute(:hidden, true)
    redirect_to :controller => 'pages', :action => 'home'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...