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

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.association代わりにのを使用していることに注意してくださいf.collection_select。あなたの場合は使いやすいと思います。

于 2012-05-22T09:23:26.460 に答える
3

1つの方法は、ajaxでjQueryを使用することです。それを行うには2つの選択肢があります:

  • あなたのajaxリクエストはhtmlコードを返します->あなたは新しい価格でそれを更新するためにページのブロックを変更します

  • ajax return json-> javascript関数を使用してjsonを解析し、選択を更新します。

于 2012-05-22T09:26:04.680 に答える