2012-03-18 11 views
6

Ho appena avviato la mia app Rails e ho il seguente problema: voglio utilizzare l'interfaccia utente jQuery e il completamento automatico e quindi ho utilizzato il gem rails3-jquery-autocomplete. Io uso anche formtastic per le mie forme di rotaie.rails3-jquery-id di riferimento autocomplete con formtastic

ho due modelli:

clienti:

class Customer < ActiveRecord::Base 
    has_many :carts 
end 

create_table :customer do |t| 
    t.column :lastname, :string 
    t.column :forename, :string 
end 

Carrello:

class Cart < ActiveRecord::Base 
    belongs_to :customer 
end 

create_table :cart do |t| 
    t.column :costumer_id, :integer 
end 

Come spiegato nel documento della gemma ho fatto la configurazione di completamento automatico nel mio CartController: autocomplete :customer, :lastname, :full => true

A mio avviso con il codice formtastico sembra this:

<%= semantic_form_for @cart do |f| %> 
    <%= f.inputs do %> 
    <%= f.input :customer, 
     :as => :autocomplete, 
     :url => autocomplete_customer_lastname_carts_path, 
     :id_element => '#cart_customer_id' %> 

La domanda principale che ho è, come gestire le cose di identificazione. Voglio dire, voglio memorizzare l'ID di riferimento del cliente nel mio modello di carrello e non il nome stesso. Ho riconosciuto la possibilità di utilizzare l'opzione :id_element per fare riferimento a un campo di input ID per la memorizzazione dell'ID nel modulo. Ho capito che sembra esserci un problema con la combinazione di formtastic e ho trovato un potenziale solution.

Potrei farlo, con un <%= f.input :customer_id, :as => :hidden %>, ma davvero non so cosa scrivere nella riga: <%= f.input :customer, :as => :autocom.... È: il cliente la soluzione giusta per questo? Questo approccio mi avrebbe dato la seguente: "cart"=>{"customer"=>"26","customer_id"=>"0"}

Qualcuno ha un'idea, forse ho capito male tutto l'insieme: cosa id_element ...

risposta

2

Inoltre ha un nome di colonna sbagliata in migrazione.

create_table :cart do |t| 
    t.column :customer_id, :integer 
end 

ok ho trovato :)

Quindi è necessario fare un hidden_field con customer_id e dire al completamento automatico per aggiornare il valore di ingresso. il tag: update_elements => {}

<%= autocomplete_field_tag "cart_customer_name", "" , autocomplete_customer_lastname_carts_path, :id_element => "#customer_customer_id", :update_elements => {} %><br /> 
<%= f.hidden_field :customer_id %> 

Quindi: id_element è l'elemento id che si desidera aggiornare quando si seleziona un risultato.