验证错误的嵌套资源将允许编辑所有子模型

时间:2011-08-01 06:33:23

标签: ruby-on-rails ruby-on-rails-3

我有以下关系::discussion has_many :posts,我将Post模型嵌套在讨论中。

讨论#show view有一个表单,允许用户在该讨论中创建帖子(回复)。

在我的更新操作中,我有:

if @discussion.update_attributes(params[:discussion])
  format.html { redirect_to(@discussion, :notice => 'success') }
else
  format.html { render :action => "edit" }
end

我使用field_for :posts, @post来A)允许嵌套模型更新B)将表单限制为仅允许单个帖子创建。

但是,如果验证失败,页面将以可编辑的形式显示属于表单的所有帖子。我只想让用户重新编辑单个帖子。有没有一个很好的方法来实现这个目标?

如果验证失败,则不保存帖子,我不知道如何指出特定的新帖子。

我想也许我不应该通过讨论形式创建帖子,因为它就像是一层开销。但现在我已经嵌套了,我无法再转到帖子/新视图。

1 个答案:

答案 0 :(得分:0)

这是我提出的仅允许单个帖子编辑的方式:

else
  format.html { 
    @post = @discussion.posts.last
    render :action => "edit"
  }

有点hackish,黑客仍然可以发送被黑客入侵的POST消息并改变其他帖子。因此欢迎更好,更干净的解决方案。