0

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

同一页面有 3 种不同的表单,它们作用于同一模型:

  • 更改用户个人资料图像

  • 更改用户名/电子邮件

  • 更改用户密码

它们分开的原因:照片被选中时会自动上传(不需要密码),姓名/电子邮件可以在不需要密码但需要提交表格的情况下更改,密码需要当前密码才能更改。

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

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

有一个更好的方法吗?

4

2 回答 2

2

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

于 2013-01-19T12:27:18.537 回答
0

在您的控制器中,您可以检查哪些参数已发送,然后采取适当的行动吗?

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

然后你有一个路由,其行为取决于发送的内容。

于 2013-01-19T10:17:38.693 回答