6

Ryan bates のネストされたモデル フォームを使用しましたが、正常に動作していますが、
アイテムと呼ばれるネストされたモデルを持つストレージと注文の 2 つのモデルがあります。

保管所:

has_many :orders  
has_many :items, :dependent => :destroy
accepts_nested_attributes_for :items

注文:

belongs_to:storage         
has_many :items, :dependent => :destroy
accepts_nested_attributes_for :items

オーダービューにはストレージセレクトボックスがあり、

<%= f.select :storage_id,
            Storage.all.map{|s| [s.store_no, s.id]} %>

保管番号を選択すると、それぞれのアイテムが注文フォームに表示され、部分的に表示され
、最善の方法を教えてください.

ありがとう、

4

1 に答える 1

7

まず、入力フィールドが変更されていることを確認する必要があります。したがって、次のように仮定します。

  1. Storage セレクターの ID は「storage」です
  2. ストレージセレクターは、値として「ストレージ」の ID を持っています

...これをファイルに入れることができstorage.coffee.jsます:

jQuery ->
  $('select#storage').change ->
    storage_id = $('option:selected',this).val()
    $.get 'storages/' +storage_id+ '/orders.js'

次に、 OrdersController が次のように見える場合、 Orders が storage の下にネストされていると仮定します。

OrdersController < ApplicationController

  def index
    @storage = Storage.find(params[:storage_id])
    @orders = @storage.orders
  end

end

...そして、部分的なものがある場合app/views/orders/_order.html.erb...

...そして、div#ordersあなたのページに注文を落としたい がある場合...

app/views/orders/index.js.erb...次に、次のようなファイルを作成できるはずです。

$('div#orders').html('<%= escape_javascript(render @orders) %>');

これにより、特定のストレージに属する注文のインスタンスごとにパーシャルのコピーがレンダリングされ、それがストレージ セレクターの後に dom に追加されます。

何が起こっているか: 選択メニューが変更されると、指定されたストレージの注文インデックスに js GET リクエストが発行されます。次に、そのリクエストは自動的に index.js ページの提供を試み、そのビューで使用可能なコントローラーに設定されたインスタンス変数を使用します。そのビューの js は、補間されたルビが挿入された後に実行されるため、レール関数 ( などrender @orders) を使用でき、それらの出力は を介し​​て dom に注入され$('div#orders').html('your rendered orders will be inserted in here by rails')ます。

明らかに、ページに合わせてこれを微調整する必要があります。ページのどの要素が呼び出されるかなどについて推測しているだけですが、この基本的な概念はうまく機能するはずです。ご不明な点がございましたら、お知らせください。

于 2012-04-22T20:22:49.837 に答える