2014-11-26 6 views
5

Sono nuovo sulle rotaie e non riesco a progettare un modulo. Ho un modello e un controller per "Utente". Ho creato un modulo che accetta un utente alla volta. Quello che sto cercando di creare è un modulo per accettare più utenti dalla stessa pagina.Modulo Rails per la creazione di più voci dello stesso modello

def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to @user 
    else 
     render 'new' 
    end 
    end 

Forma in nuova

<%= form_for(@user) do |f| %> 
    <%= render 'fields', f: f %> 
    <%= f.submit "Create my account", class: "btn btn-large btn-primary" %> 
<% end %> 

_fields.html.erb

<fieldset> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.label :email %> 
    <%= f.text_field :email %> 

    <%= f.label :password %> 
    <%= f.password_field :password %> 

    <%= f.label :password_confirmation, "Confirmation" %> 
    <%= f.password_field :password_confirmation %> 
</fieldset> 

Nota: io so come creare Nested form. Se vedi il link il tutorial mostra come creare più domande per un sondaggio. Quello che voglio è creare più sondaggi nella stessa forma.

+0

da più utenti, vuoi dire che il numero o il numero esatto dovrebbe essere dinamico? –

+0

Se 'Utente' appartiene a un altro Modello, è possibile creare un modulo per quel Modello e nidificare più utenti. – Santhosh

+0

Il numero sarà dinamico e dipenderà dal numero di altri modelli presenti – theHumbleProgrammer

risposta

1

cercare di fare qualcosa di simile:

<%= form_tag(some_url_path, method: :put) do %> 
    <% for user in @users %> 
     <%= fields_for "users[]", user do |f| %> 
      <%= render 'fields', f: f, user: user %> 
     <% end %> 
    <% end %> 
    <%= submit_tag "Submit" %> 
<% end %> 

e nel controller che si dovrebbe creare @users invece di un singolo @user in new metodo, e in create metodo per accettare più utenti anziché uno.

UPDATE:

quando si desidera aggiornare gli utenti in controllore, si può fare come (non ho provato):

User.update(params[:users].keys, params[:users].values) 

e di creare:

User.create(params[:users].values) 

params[:users].keys deve essere l'hash degli ID utente e params[:users].values deve essere l'hash degli attributi degli utenti corrispondenti

Non so come pensi di gestire il numero dinamico di utenti, ma forse potrebbe essere d'aiuto.

+0

Sono riuscito a farlo funzionare con un approccio simile (usando form_tag), ma non sono ancora sicuro che questo sia il modo migliore per andare da quando ha creato complicazioni con parametri forti nelle rotaie 4. Quindi tenerlo aperto per eventuali future risposte. – theHumbleProgrammer

+0

yes sure, sicuramente dovrebbe essere cambiato 'params [: users]' e usato parametri forti. Volevo solo mostrare un esempio di come potrebbe essere risolto –

Problemi correlati