2016-09-04 5 views
1

У меня есть модель пользователя и модель Todo. Я хочу иметь возможность добавлять несколько todos, используя одну форму.Rails - Добавить несколько записей в одной форме

Маршруты: модель

# Users 
    resources(:users) do 
    resources(:todos) 
    end 

Пользователь:

class User < ApplicationRecord 
    has_many :todos 
    .... 

Тодос Контроллер:

class TodosController < ApplicationController 

    def new 
     @user = User.find(params[:id]) 
     @todos = Array.new(10) {@user.todos.build} 
    end 
    .... 

Вид несделанного/новых:

<%= form_for([@user, :todos]) do |f| %> 
    <% @todos.each do |todo| %> 
     <%= f.text_field(:name, class: "form-control") %> 
    <% end %> 
    <%= f.submit "Save", class: "btn btn-primary" %> 
<% end %> 

Что я получаю:

undefined method `model_name' for :todos:Symbol 

Что я делаю неправильно? Я искал SO для выполнения нескольких сейвов с использованием одной формы, и я нашел this.

ответ

0

По вашему мнению, попробуйте

<%= form_for([@user, @user.todos]) do |f| %> 

Я тоже новичок в рубин, но, надеюсь, это работает.

1

Я считаю, что вы ищете вложенные формы.

В вашей модели вы будете добавлять

accepts_nested_attributes_for :todos 

и на ваш взгляд

<%= form_for @user do |f| %> 
    TODO: 
    <ul> 
    <%= f.fields_for :todo do |todo| %> 
     <li> 
     <%= todo.label :todo %> 
     <%= todo.text_field :todo %> 
     </li> 
    <% end %> 
    </ul> 


    <%= f.submit "Save", class: "btn btn-primary" %> 

<% end %> 

контроллер

def new 
     @user = User.find(params[:id]) 
     10.times {@user.todos.build} 
    end 

для референс http://guides.rubyonrails.org/form_helpers.html#nested-forms

Примечание: это код непроверен

Смежные вопросы