我有一个包含三个不同类型字段的用户模型,我希望能够彼此独立更新
同一页面有3种不同的形式,它们作用于同一型号:
更改用户个人资料图片
更改用户名/电子邮件
更改用户密码
他们分开的原因: 选择照片时自动上传照片(无需密码), 名称/电子邮件可以更改,无需密码,但需要提交表格, 密码需要当前密码才能更改。
目前在User#update中我有一系列if / else分支用于逻辑:if params[:commit] == "Update Password"
我更新了密码,elsif params[:commit] == "Update Info"
我更新了他们的姓名/电子邮件等。
我不喜欢逻辑有多长,并且我不认为将控制器逻辑绑定到视图中的良好做法(因为逻辑基于提交时出现的params[:commit]
文本按钮)。
有更好的方法吗?
答案 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...
然后你有一条路线的行为符合预期,取决于发送的内容。