多个表单可在同一页面上编辑同一模型

时间:2013-01-19 10:01:14

标签: ruby-on-rails ruby-on-rails-3

我有一个包含三个不同类型字段的用户模型,我希望能够彼此独立更新

同一页面有3种不同的形式,它们作用于同一型号:

  • 更改用户个人资料图片

  • 更改用户名/电子邮件

  • 更改用户密码

他们分开的原因: 选择照片时自动上传照片(无需密码), 名称/电子邮件可以更改,无需密码,但需要提交表格, 密码需要当前密码才能更改。

目前在User#update中我有一系列if / else分支用于逻辑:if params[:commit] == "Update Password"我更新了密码,elsif params[:commit] == "Update Info"我更新了他们的姓名/电子邮件等。

我不喜欢逻辑有多长,并且我不认为将控制器逻辑绑定到视图中的良好做法(因为逻辑基于提交时出现的params[:commit]文本按钮)。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

要摆脱if..elsif..elsif链,您可以将更新操作拆分为update_password,update_info等,并相应地设置表单操作。当然,您还需要更新路线。

答案 1 :(得分:0)

在您的控制器中,您可以查看已发送的参数,然后采取相应的行动吗?

if params[:password] && params[:password_confirmation]
  @user.password = params[:password]
end
if params[:email]
  @user.email = params[:email]
end
if @user.save
  etc...

然后你有一条路线的行为符合预期,取决于发送的内容。