2014-11-26 25 views
5

Jestem nowy na szynach i walczę o zaprojektowanie formularza. Mam model i kontroler dla "Użytkownika". Utworzyłem formularz, który akceptuje jednego użytkownika na raz. Próbuję utworzyć formularz akceptujący wielu użytkowników z tej samej strony.Szyny Formularz do tworzenia wielu wpisów tego samego modelu

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 nowej

<%= 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> 

Uwaga: Wiem, jak utworzyć Nested form. Jeśli zobaczysz link samouczek pokazuje, jak utworzyć wiele pytań do ankiety. Chcę utworzyć wiele ankiet w tej samej formie.

+0

przez wielu użytkowników, masz na myśli dokładną liczbę lub numer powinien być dynamiczny? –

+0

Jeśli "Użytkownik" należy do dowolnego innego modelu, można utworzyć formularz dla tego modelu i zagnieździć wielu użytkowników. – Santhosh

+0

Numer będzie dynamiczny, tzn. Będzie zależeć od liczby innych obecnych modeli. – theHumbleProgrammer

Odpowiedz

1

spróbować zrobić coś takiego:

<%= 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 %> 

iw sterowniku należy utworzyć @users zamiast jednej pojedynczej @user w new metody, aw create metody zaakceptować wielu użytkowników zamiast jednego.

UPDATE:

gdy chcesz zaktualizować użytkownikom w sterowniku, można zrobić jak (nie przetestować go):

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

i utworzyć:

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

params[:users].keys powinien być hashem identyfikatorów użytkowników i params[:users].values powinien być hash atrybutów odpowiednich użytkowników

Nie wiem, jak planujesz zarządzać dynamiczną liczbą użytkowników, ale może to może pomóc.

+0

Udało mi się zmusić go do działania przy użyciu podobnego podejścia (przy użyciu form_tag), ale nadal nie jestem pewien, czy jest to najlepsza metoda, ponieważ tworzy komplikacje z silnymi parametrami w szynach 4. Tak więc pozostaw to otwarte dla przyszłych odpowiedzi. – theHumbleProgrammer

+0

tak, zdecydowanie należy zmienić 'params [: users]' i użyć silnych params. Chciałem tylko pokazać przykład, jak można go rozwiązać –

Powiązane problemy