Я относительно новичок в рельсах и, наконец, нашел правильный способ использования accepts_nested_attributes_for
.
Однако в Интернете есть серьезные ресурсы, которые говорят, что использование accepts_nested_attributes_for
обычно плохое (например, один).
Какие изменения необходимы, чтобы избежать accepts_nested_attributes_for
и в какую папку вы поместили бы дополнительный файл класса (я думаю, нужен дополнительный класс).
Я читал, что virtus подходит для этого. Правильно ли это?
Вот очень простой пример, по-прежнему использующий accepts_nested_attributes_for
(найти полный пример здесь):
Модели
class Person < ActiveRecord::Base
has_many :phones
accepts_nested_attributes_for :phones
end
class Phone < ActiveRecord::Base
belongs_to :person
end
контроллер
class PeopleController < ApplicationController
def new
@person = Person.new
@person.phones.new
end
def create
@person = Person.new(person_params)
@person.save
redirect_to people_path
end
def index
@people = Person.all
end
private
def person_params
params.require(:person).permit(:name, phones_attributes: [ :id, :number ])
end
end
Просмотр (people/new.html.erb)
<%= form_for @person, do |f| %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<%= f.fields_for :phones do |builder| %>
<p>
<%= builder.label :number %><br />
<%= builder.text_field :number %>
</p>
<% end %>
<%= f.submit %>
<% end %>
[править]
Было бы неплохо использовать служебный объект?