2012-04-20 12 views
6

Ho usato il modello di nidificazione di Ryan bates che funziona correttamente, ma
ho due modelli i, e archiviazione e ordine entrambi con modello annidato chiamato elementi.Modulo nidificato dinamico al momento del cambio della casella di selezione

bagagli:

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

ordine:

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

In considerazione fine c'è stoccaggio casella di selezione,

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

Selezionando numero stoccaggio rispettive voci dovrebbe appare nella forma Ordini con parziale
qualsiasi organismo può dirmi il miglior modo di fare

Grazie,

risposta

7

In primo luogo è necessario fare attenzione che il campo di input per vedere se è cambiato. Quindi, supponendo che:

  1. il selettore bagagli ha un id di 'stoccaggio'
  2. il selettore di archiviazione ha l'id del 'stoccaggio' come valore

... si potrebbe mettere questo nel file di storage.coffee.js:

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

Poi, partendo dal presupposto che gli ordini sono annidate in custodia, se il vostro OrdersController si presenta in questo modo:

OrdersController < ApplicationController 

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

end 

... e se si dispone di un parziale app/views/orders/_order.html.erb ...

... e se si dispone di un div#orders sulla tua pagina che si desidera che gli ordini è sceso in ...

.. .poi si dovrebbe essere in grado di creare un file app/views/orders/index.js.erb in questo modo:

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

Questo dovrebbe rendere una copia del parziale per ogni istanza degli ordini che appartengono ad un dato di stoccaggio e aggiungerlo al DOM dopo il selettore di memoria.

Che cosa sta succedendo è: quando il menu di selezione viene modificato, genera una richiesta jET GET all'indice degli ordini per l'archiviazione specificata. Quindi tale richiesta tenterà automaticamente di pubblicare una pagina index.js, con le variabili di istanza impostate nel controller disponibili per quella vista. Il js in quella vista verrà eseguito dopo che è stato inserito qualsiasi ruby ​​interpolato, quindi è possibile utilizzare le funzioni rails (come render @orders) e quindi l'output di quelli viene iniettato nella dom tramite $('div#orders').html('your rendered orders will be inserted in here by rails').

Chiaramente dovrai modificarlo per adattarlo alla tua pagina, sto solo supponendo su quali elementi della tua pagina vengono chiamati ecc., Ma questo concetto di base dovrebbe funzionare correttamente. Fatemi sapere se avete domande.

+0

Grazie per la vostra risposta ho usato i binari 2.3.5 e il prototipo e ho seguito il concetto. –

Problemi correlati