【问题标题】:Dynamically change form based on value selected in combobox in Ruby on Rails根据在 Ruby on Rails 的组合框中选择的值动态更改表单
【发布时间】:2012-03-08 06:29:23
【问题描述】:

我有以下表格:

Services
ID| Service_type_id| desc| date|payment_terms

Service_types
ID|NAME|isCredit

Payment_Terms
ID|Payment_Term

服务表包含服务列表。服务类型定义了所提供的服务类型。某些 service_types 以信用形式提供 - isCredit 字段包含布尔值 1 或 0。问题是当用户添加服务时 - 我有一个填充了服务类型的组合框。但是我需要的是,当用户选择 isCredit 值为 1 的服务类型时,它应该在同一个表单上显示一个组合框,其中包含付款条款表中的付款条款选项。

如何在 ruby​​ on rails 中做到这一点?我只希望在选择的 service_type 的 isCredit 值为 1 时显示 payment_term 组合框,否则 services.payment_terms = 0

【问题讨论】:

  • 你需要用 Javascript 来做。这不是 Rails 问题。

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


【解决方案1】:

首先,隐藏付款条件的选择框(例如使用特定的 css 类)。假设它的 id 为 payment_terms

然后呈现带有附加数据属性的服务选择框以跟踪服务isCredit 0|1

<select id=services>
<% services.each do |service| %>
    <option value=<%=service.id %> data-iscredit=<%=service.type.isCredit ? '1' : '0' %>><%=service.desc %></option>
<% end %>
</select>

在 JS 中编写一个简单的脚本来处理填充了服务的选择上的change 事件并显示/隐藏payment_terms 选择依赖于isCredit。我假设你正在使用 jQuery。

$("#services").change(function() {
   var selopt = $(this.children[this.selectedIndex]),
       isCredit = parseInt(selopt.attr('data-iscredit'));
   if (isCredit === 0) {
       $("#payment_terms").hide();
   } else {
       $("#payment_terms").show();
   }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2015-12-28
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多