【问题标题】:Multiple forms to edit the same Model on the same page多个表单在同一页面上编辑同一模型
【发布时间】:2013-01-19 10:01:13
【问题描述】:

我有一个包含三种不同类型字段的用户模型,我希望它们能够相互独立地更新

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

  • 更改用户头像

  • 更改用户名/电子邮件

  • 更改用户密码

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

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

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

有没有更好的方法来做到这一点?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-18
        • 2015-08-13
        • 1970-01-01
        • 2020-01-27
        相关资源
        最近更新 更多