我目前有一个带有典型用户模型的Ruby on Rails应用程序。我想允许用户编辑自己的帐户信息,并更改他们的电子邮件或密码。但是,我想在两个不同的页面上有相应的表格。
users_controller.rb
已有show
,new
,create
和edit
路径。问题是使用edit
用户数据库的update
路径要求所有表单都在同一页面上,这对于只想更新其电子邮件或密码的用户来说不方便,而不是两者都不方便。基本上,我需要在多个页面上提供edit
路径。
有什么建议吗?
答案 0 :(得分:1)
将表单拆分为单独的.html.erb
文件(例如email.html.erb
和password.html.erb
),并在控制器中编写如下内容:
def edit
...
if params[:email]
render 'email'
end
if params[:password]
render 'password'
end
end
显然,条件可以是你想要的任何条件。
答案 1 :(得分:1)
不可能。每条指定路线只能执行一次操作。
您可以使用一个名为route 的附加参数来告诉控制器要呈现的表单(或表单的一部分):
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
我认为这仅适用于UX而非安全性。所有这些单独的表单将PUT到相同的更新操作,这意味着可以以另一种形式访问以一种形式访问的所有属性(例如密码)。