1

我在表格中有这个

    <%= simpleform_for @customer_bill do |f| %>
    <%= f.label :product_id %>
    <%= f.collection_select :product_id,Product.all,:id,:title, :prompt => "Select a Product", :style => 'width:150px;' %>

     <%= f.label :price %> 
    <%= f.text_field :price, :size=>20, :id =>"price", :class =>"price" %>
    <br/>
/*rest of code*/

在产品表中,我有“产品标题”和“价格”。我在客户账单和产品模型之间建立了必要的关联。

选择产品后,价格应自动出现。最好的方法是什么?Ajax/Jquery 我该如何处理这个问题????任何指导都会有所帮助。

4

2 回答 2

3

一种方法是将 jQuery 与 ajax 一起使用。您有两种选择:

  • 您的 ajax 请求返回 html 代码 -> 您更改页面中的一个块以使用新价格更新它

  • 您的 ajax 返回 json -> 您使用 javascript 函数来解析 json 并更新您的选择。

于 2012-05-22T09:26:04.680 回答
3

您可以使用 select-tag 的 data-xxx 属性来存储价格并让 javascript 处理它:

JavaScript:

    $(function() {
        $('#products').change(function() {
            var product_id = $(this).val()
            var price = eval($(this).data('prices'))[product_id]
            $("#price").html(price)
        })
    })

模板(它是 Haml,但我想即使你是 ERb-guy,你也会明白的):

= simple_form_for ........ do |f|
    - prices = Hash[Product.all.map{|p| [p.id, p.price]}].to_json
    = f.association :product, input_html: {data:{prices: prices}, id: 'products'}
    = f.label :price, id: 'price'

请注意使用f.associationof f.collection_select。我认为在您的情况下使用起来更简单。

于 2012-05-22T09:23:26.460 回答