【问题标题】:How to make a Haml form with two conditional actions如何使用两个条件动作制作 Haml 表单
【发布时间】:2020-03-25 01:55:15
【问题描述】:

提交时,此表单将调用控制器上的put 操作:

.panel-body{style: 'background:#0E0D0D;'}
    =form_for @payment, method: :put, html: {id: 'edit_bank_detail'} do |f|          .row.text_white
      .form-group.col-lg-12
        =f.label :paypal_email_address
        =f.email_field 'user_paypal_email',class: 'form-control'
    .row.text-center
      .form-group.col-lg-12
        =f.submit 'Submit', class: 'btn btn-primary text_black',data: { disable_with: "Please wait..." }

我需要它根据条件调用putcreate 操作:

if @payments.new_record? 
  # create action
else
  # put action   

【问题讨论】:

  • 如果唯一改变的是方法,它是一个符号,你可以使用三元运算符(@payments.new_record? ? :post : :put)
  • 欢迎来到 Stack Overflow。请参阅“How to Ask”以及链接页面和“mcve”。你研究过这个吗?在哪里?如果它没有帮助告诉我们原因。你尝试了什么?如果你不尝试,为什么不呢?如果你做了,你做了什么?我们希望看到您最小的尝试来解决它。您要求我们教您如何编写代码,但在 Stack Overflow 上,我们希望您尝试编写它,然后我们会帮助修复它。

标签: html ruby-on-rails ruby haml


【解决方案1】:

您甚至不需要一开始就指定 HTTP 方法。 form_for 及其继任者 form_with 足够聪明,可以通过在作为第一个参数传递的 @payment 模型实例上调用 #persisted? 来确定操作属性的路径和方法。

= form_for @payment, html: {id: 'edit_bank_detail'} do |f|

给定常规路由,如果记录已保留,这会将表单指向POST /paymentsPATCH /payments/:id。 Rails 使用 PATCH 而不是 PUT 进行更新 since 2012resourcesresource 仍会生成额外的 PUT 路由以实现向后兼容性。

【讨论】:

    【解决方案2】:

    我尝试了类似的方法,它确实有效。

     =f.submit 'Submit', action_name: @return.new_record? ? 'create' : 'update'
    

    感谢@Sebastian Palma 采纳了您的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2011-01-14
      • 2020-10-03
      • 2016-03-31
      • 1970-01-01
      • 2011-05-21
      • 2021-09-01
      相关资源
      最近更新 更多