我有一个用户模型,有三个不同类型的字段,我希望能够相互独立地更新
同一页面有3种不同的表单作用于同一模型:
-
修改用户头像
-
更改用户名/email
-
修改用户密码
分开的原因:照片被选中后会自动上传(不需要密码),更改姓名/电子邮件无需输入密码,但需要提交表格;
密码需要当前密码修改。当前在user# update中,我有一系列的if/else分支用于逻辑:if params[:commit] == "Update Password"
我更新密码,elsif params[:commit] == "Update Info"
我更新他们的名字/电子邮件,等等。
我不喜欢多长时间的逻辑得到,我不认为它的良好做法,将控制器逻辑绑定到视图(因为逻辑是基于params[:commit]
文本,出现在提交按钮)。
有更好的方法吗?
去掉if.. else ..Elsif链,你可以把你的更新动作分成update_password, update_info等,并相应地设置你的表单动作。当然你也需要更新你的路由
在你的控制器中,你可以检查一下哪些参数已经发送,然后采取适当的行动吗?
if params[:password] && params[:password_confirmation]
@user.password = params[:password]
end
if params[:email]
@user.email = params[:email]
end
if @user.save
etc...
那么你就有了一条路由,它的行为取决于所发送的内容。