我对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
由于某些原因,当此函数运行时,它不会更新Story的“hidden”属性,但@ story.save返回true(它执行if语句的第一部分)。我设置错误来设置@ story.hidden = true吗?我正在使用sqlite,如果这很重要的话。谢谢!
答案 0 :(得分:0)
如果这只是将布尔属性更新为true,那么你可以这样做:
def hide
@story = Story.find(params[:id])
@story.update_attribute(:hidden, true)
redirect_to :controller => 'pages', :action => 'home'
end
答案 1 :(得分:0)
那么,首先,您为什么要使用自定义操作?这应该进入控制器中的更新操作,你应该通过表单传递布尔值。
现在,针对您的具体问题,检查@story变量是否修改了对象,但是这样做:
logger.debug @story.changed?
如果返回true,则表示应该更新记录,并且您应该查看日志以确定UPDATE语句到底是什么。你应该把它发回到这里。
答案 2 :(得分:0)
使用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