首页 > 解决方案 > select_tag rails,提交前动态显示值

问题描述

我有一个表格,显示了我可以选择的一些可用银行,使用 select_tag。当我提交表单时,所选银行存储在 params[:bank] 中

我想要做的是在提交之前动态显示有关所选银行的信息。基本上,如果我选择“银行 1”,我想显示银行 1 的信息。如果我选择银行 2,我想显示银行 2 的信息。当我高兴时,我会屈服。

这是我的代码

<%= form_tag final_payments_path, method: :get do %>

  <%= select_tag "bank", options_from_collection_for_select(Bank.active, "id", "name") %>

  <%= button_tag( class: "btn-continue-displayed mt-3") do %>
   <i class="fas fa-caret-left"></i><p>Approve</p>
  <% end %>
<% end %>

如何在提交和显示信息之前动态找到选定的选项?

我的第一步是在我的选择标签上添加 onchange: "alert(this.value)"。它工作并显示ID。如果我改变并放

 options_from_collection_for_select(Bank.active, "IBAN", "name")

它通过 IBAN 显示警报。这是一个好的开始。

有没有一种方法可以将 3 个元素(id、IBAN 和 SWIFT)放入值中,而不仅仅是一个?

非常感谢你的帮助

标签: javascriptruby-on-railshtml-select

解决方案


You can find bank id via js:

$('#select_tag_id').on('change', function () {
    let bank_id = $(this).val();
});

bank_id will contain id of selected bank.

routes.rb:

  get "/selected_bank" => 'your_controller#show_info'

Then:

$('#select_tag_id').on('change', function () {
      let bank_id = $(this).val();
      $.ajax({
          data: {bank_id: bank_id},
          url: '/selected_bank',
          type: 'GET'
      });
  });

Your controller:

def show_info
  @bank = Bank.find(params[:bank_id])
  respond_to { |format| format.js }
end

_info.html.erb:

<div class="info">
  <p>
    Id:
    <%= @bank.id %>
  </p>
  <p>
    Name:
    <%= @bank.name %>
  </p>
</div>

show_info.js.erb:

$('.some-class-on-page').html("<%= j(render 'info') %>");

推荐阅读