簡體   English   中英

如何使 Rails 5.2 表單遠程提交?

[英]How to make Rails 5.2 form submit remotely?

在我看來,使用 Slim:

= form_with url: update_pn_price_path(@price)
  .form-group
    = label_tag :part_number
    = text_field_tag :part_number, @price.part_number, required: true

  .form-group
    => submit_tag t(:save), class: 'btn btn-primary btn-sm'
    = link_to 'Cancel', '', class: 'btn btn-link btn-sm', data: { cancel_in_place: true }

這總是使用標准提交提交,而不是遠程提交。 日志顯示:

Processing by PricesController#update_pn as HTML

我究竟做錯了什么? 為什么不使用JS提交?

我很驚訝地看到你的觀點可以編譯。 我可以發現一些問題。

  1. 您開始縮進內容,就像它在表單中一樣。 但是,您沒有打開表單標記或向form_with方法提供塊。

     = form_with url: update_pn_price_path(@price) .form-group

    至少應該改為:

     = form_with url: update_pn_price_path(@price) do .form-group

    由於一個變量被提供給一個塊,首選的方法是將它捕獲到一個變量中(下面代碼中的form )。 如果您不打算使用它,您仍然應該將它捕獲在一個帶下划線的變量中,以表明它在那里,但沒有被使用( _form )。

     = form_with url: update_pn_price_path(@price) do |form| .form-group
  2. 由於您使用的是表單構建器,因此創建元素的首選方式是通過表單構建器界面。 由於您不是通過表單構建器創建提交標簽,這可能是提交不是遠程完成的另一個原因。

    我至少會替換:

     => submit_tag t(:save), class: 'btn btn-primary btn-sm'

    和:

     = form.submit t('save'), class: 'btn btn-primary btn-sm'

    但最好更新整個表單以使用表單構建器。 結果應該是這樣的:

     = form_with model: @price, url: update_pn_price_path(@price) do |form| .form-group = form.label :part_number = form.text_field :part_number, required: true .form-group = form.submit t('save'), class: 'btn btn-primary btn-sm' = link_to 'Cancel', '', class: 'btn btn-link btn-sm', data: {cancel_in_place: true}

有關更多/其他表單構建器方法,請參閱FormBuilderFormHelper文檔。

這是解決問題的方法。 菜鳥錯誤,但張貼在這里以防其他人遇到它。

我上面顯示的表單在另一個表單中。 您可以提交這樣的“內部”表單,但不能遠程提交。 該表單是通過 AJAX 調用插入的,因此我將其更改為插入到 HTML 正文的末尾,然后使用 CSS 進行定位。 這將它放在包含表單之外並使事情按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM