如何路由多个页面以“编辑”用户帐户信息(Rails)

时间:2013-06-06 02:05:18

标签: ruby-on-rails forms rest model

我目前有一个带有典型用户模型的Ruby on Rails应用程序。我想允许用户编辑自己的帐户信息,并更改他们的电子邮件或密码。但是,我想在两个不同的页面上有相应的表格。

users_controller.rb已有shownewcreateedit路径。问题是使用edit用户数据库的update路径要求所有表单都在同一页面上,这对于只想更新其电子邮件或密码的用户来说不方便,而不是两者都不方便。基本上,我需要在多个页面上提供edit路径。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

将表单拆分为单独的.html.erb文件(例如email.html.erbpassword.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到相同的更新操作,这意味着可以以另一种形式访问以一种形式访问的所有属性(例如密码)。