不可能。每个命名路由只有一个操作。
您可以使用一个命名路由加上一个额外的参数来告诉控制器要呈现哪个表单(或表单的一部分):
named route path
edit_user_path(@user, :form => "info") mysite.com/users/1/edit?form=info
edit_user_path(@user, :form => "acct") mysite.com/users/1/edit?form=acct
edit_user_path(@user) mysite.com/users/1/edit
然后读取这个参数并根据值在模板之间切换。没有参数将呈现包含完整表单的默认视图:
def edit
# ...
case params[:form]
when "info"
render :template => "info_only"
when "acct"
render :template => "name_and_password"
else
render :action => :edit
end
end
我认为这只是为了用户体验而不是为了安全。所有这些单独的表单都将 PUT 到相同的更新操作,这意味着以一种形式访问的所有属性(例如密码)都可以在另一种形式中访问。