使用field_for的动态字段

时间:2013-05-03 14:19:50

标签: ruby-on-rails-3 fields-for

我有一个“卖”形式,我使用fields_for来提供有关待售产品的信息。

这是我的fields_for表单:

<%= f.fields_for :sellproducts do |c| %>
    <%= c.label :product %> <%= c.grouped_collection_select :product_id, Category.order(:name), :products, :name, :id, :name, :include_blank => true  %>
    <%= c.label :quantity %> <%= c.text_field :quantity, :size =>"5" %><br />

    <%= c.label :cost %> <%= c.text_field :cost, :size =>"5" %>

    <%= c.link_to_remove "Delete" %>

<% end %>

当用户在select字段中选择产品但我不知道如何执行此操作时,我希望将“cost”text_field动态填充product.price的值。事实上,我不知道如何获得价值,然后把它... ...

有人可以帮帮我吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我可以想到两种方法,你可以做到这一点,都涉及JS。

<强>非Ajax: 构建您的选项,并包含每个产品的数据属性。

<option value="<%= product.id %>" data-price="<%= product.price %>"><%= product.name %></option>

然后在onchange上,只需获取所选选项,并将其数据价格放在成本输入字段中。

$('body').on('change', 'select.products', function(){
    var that = $(this),
      , costInput = that.parent("fieldset").("input.cost"); # Perhaps if you wrap the elements in a fieldset

    costInput.val(that.find('option:selected').val())
});

优点:数据存在 缺点:您必须管理表单助手

附带的“选定”部分

Ajax(更好的方式): 添加一个onchange事件,用于检索所选产品的价格。

$('body').on('change', 'select.products', function(){
    var that = $(this),
      , costInput = that.parent("fieldset").("input.cost"); # Perhaps if you wrap the elements in a fieldset

     $.ajax({
        url: "products/price",
        data: {id: that.find('option:selected').val()),
        dataType: 'script'
    }).done(function ( price ) {
        costInput.val(price)
    });
});

优点:不需要对html大惊小怪 缺点:想不出任何值得注意的事情。