不成功的更新渲染:编辑。为什么编辑显示在:show path?

时间:2016-03-23 02:40:57

标签: ruby-on-rails

典型的Rails更新操作看起来像这样

def update
  respond_to do |format|
    if @object.update(object_params)
      # success results
    else
      format.html { render :edit }
    end
  end
end

我希望如果更新不成功,用户将会在路径/objects/:id/edit上结束。

为什么然后是实际路径/objects/:id,但是显示了编辑表单?

这是正常的行为,还是这个应用程序中发生的奇怪事情?

修改

#routes.rb

devise_for :users
resources :objects do
  resources :children, only: [:index, :new, :create]
  member do
    get :customaction
  end
end

#ability.rb
can :create, Object
can :manage, Object, id: @user.object_id
cannot [:index, :destroy], Object

1 个答案:

答案 0 :(得分:3)

让我解释一下,

我希望您在编辑表单中注意到它

<form class="edit_post" id="edit_post_1" action="/posts/1" accept-charset="UTF-8" method="post">

表单数据发布在/posts/1;这是浏览器发送表单数据的URL。

因此,当您的update任务失败或发生任何validation错误时;您不重定向http请求而是呈现edit-form并返回浏览器。浏览器会在不更改web address的情况下显示表单。

注意:只有redirect更改了网址,render没有。

如果表单数据已提交到/posts/1/edit而不是/posts/1

,那么您的假设是正确的