在Rails中更新时保留参数

时间:2012-02-13 20:08:04

标签: ruby-on-rails forms actioncontroller

将Post作为示例模型,假设Post有2个属性,两个属性都有验证。在编辑帖子时,请说我更改了2个属性,然后一个未通过验证,导致页面重新加载。在我看来,当重新加载页面时,以前保存的帖子属性版本会显示在表单中,而不是我刚刚输入的属性,尽管我刚输入的属性都在params中。

这将在典型的创建操作中处理,因为post实例变量声明将如下所示:

@post = Post.new(params[:post])

但是,在更新操作中,post实例变量如下所示:

@post = Post.find(params[:id])

因此,输入到表单中的更改将传递给参数,而不会在表单上重新呈现。我是否正确地描述了这一点,如果是这样,有什么方法可以在验证失败时使用表单呈现更改?或者,也许只有那些没有通过验证的变更?

1 个答案:

答案 0 :(得分:1)

正如corey所说,你需要在更新时更新属性,所以:

@post = Post.find(params [:id])

if @post.update_attributes(params[:post])
  redirect_to post_path(@post)
else
  render :new
end

您目前没有更新帖子的实例,因此您可以看到数据库中的内容。