【问题标题】:Match button click to new rails controller method inside a form tag将按钮单击匹配到表单标记内的新 Rails 控制器方法
【发布时间】:2019-12-19 15:53:12
【问题描述】:

我有一个form_tag 和一个映射到rails 控制器方法的现有submit_tag。我的.haml 代码如下所示:

 .form-group
   =form_tag "/set_limits", {id: 'ec2-instance-limit-form'} do |form|
        = submit_tag "Increase Limits", {class: "btn btn-danger"}

我的 routes.rb 文件的 sn-p 将 url /set_limits 与 rails 控制器的方法匹配如下所示。

match '/set_limits', to: 'limits#handle_limit_request', via: [:post]

我现在在同一页面上添加了一个按钮。

%button.btn.btn-info(id="customer-status" type="button") Customer Status

但是,当我单击此按钮时,请求仍会路由到 handle_limit_request 方法。我希望单击此按钮以通过 POST 路由到新方法,例如limits#check_customer_status。如何在确保单击 submit_tag 的操作仍路由到 limits#handle_limit_request 的同时将按钮单击路由到新的控制器方法?

【问题讨论】:

    标签: ruby-on-rails ruby haml


    【解决方案1】:

    据我所知,最好的方法可能是在控制器本身中处理此问题,而不是路由或将不同的 url 传递给 form_for。

    .form-group
       =form_tag "/set_limits", {id: 'ec2-instance-limit-form'} do |form|
            = submit_tag "Increase Limits", {class: "btn btn-danger", name: "increase_limits"}
            = submit_tag "Customer Status", {class: "btn btn-danger", name: "customer_suport"}
    

    然后在限制控制器中,

    def handle_limit_request
      if params[:increase_limits]
        # Do stuff for first button submit
      elsif params[:customer_suport]
        your code for method "check_customer_status"
        or 
        render check_customer_status
      end
    end
    

    【讨论】:

      【解决方案2】:

      我希望单击此按钮以路由到新的 通过 POST 方法,比如limits#check_customer_status

      为此,请使用button_to

      = button_to "Customer Status", '/check_customer_status', :method => :post, :form_class => "btn.btn-info", id: "customer-status"
      

      注意 - 此按钮 (Customer Status) 在页面上的位置应该在 form_tag 范围之外,因为 button_to 在内部也会生成一个表单,form within a form 可能不起作用。

      【讨论】:

      • 感谢您的建议!我需要我的 |form| 中的一些输入字段的值,我如何在 /check_customer_status 中查看这些值?
      • @VictorCui 对不起,我不明白,form_tag 是另一种形式,并路由到不同的 URL,如果您在单击表单或类似的东西之前需要该值,则 button_to 被路由到另一个 URL 可以处理通过 javascript/jquery。
      • 当我使用 javascript/jquery 单击 submit_button 时,我会读取表单输入值,但是当我单击 button_to 时,我需要使用 AWS SDK 的 ruby​​ 进行后端调用。也许我可以创建一个 AJAX POST 调用,然后将表单输入数据传递给我的 Rails 控制器?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 2020-02-10
      相关资源
      最近更新 更多