典型的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
答案 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