У меня есть структура базы данных, в которой в моих статьях много людей (через объединение, но это работает нормально)
То, что я хотел бы случиться, это то, что когда люди создают статью, они могут одновременно создавать новых людей
Т.е. путь должен иметь форму article / new / people / new
Фактически, без использования вложенных маршрутов, я справился с этим с помощью этого подхода
article.rb (модель)
attr_accessor :new_person
articles_controller.rb
def create
@article = Article.new(params[:article])
if params[:add_person]
@person = Person.check_if_exists_or_create(@article.new_person["first_name"], @article.new_person["last_name"])
if @person.save
@article.people << @person
@article.new_person = nil
end
render :action => "new" and return
end
...
end
form.erb
<%= form_for @article do |f| %>
...
<%= fields_for :new_person do |p| %>
<% if @person && @person.errors.any? %>
<%= render :partial => "shared/error_messages", :object => @person %>
<% end %>
<div class="field">
<%= p.label :first_name, "First Name" %>
<%= p.text_field :first_name %>
</div>
<div class="field">
<%= p.label :last_name, "Last Name" %>
<%= p.text_field :last_name %>
</div>
<%= submit_tag "Add Person", :name => "add_person" %>
<% end %>
...
<p>
<%= f.submit %>
</p>
<% end %>
До некоторой степени это работает нормально, но теперь форма усложняется с другими полями. Я подумал, что могу изменить ее, чтобы воспользоваться вложенными маршрутами.
Кроме того, он добавляет много логики к контроллеру создания - и в дальнейшем я мог бы подумать о том, чтобы сделать эти действия javascript, и в этом случае я понимаю, что определение конкретной кнопки, нажатой контроллером, является более сложным.
По этим причинам я подумал, что подход с вложенным маршрутом может быть более естественным.
Для существующих статей это работает нормально, например, / Articles / 1 / people / new без проблем.
Я знаю, что вложенные формы - это, кроме всего прочего, причины неточности проверки html, поэтому я попробовал многочисленные комбинации form_for и fields_for для достижения цели:
на статьи / новая страница
отправка основной формы в статьи / новые
отправка формы "sub" с полями new_person в статьи / new / people / new
и сделать изменения в UJS настолько безболезненными, насколько это возможно
Самое теплое, как мне кажется, было с этой ошибкой
No route matches {:controller=>"people", :article_id=>#<Article id: nil, title: nil, published_on: nil, created_at: nil, updated_at: nil, people_count: nil, organizations_count: nil>}
Я предполагаю, что проблема в том, что нет никакого article_id, чтобы связать человека с этим моментом.
Но на самом деле меня интересует только добавление этого человека в базу данных, а затем создание отношений в статье, которая затем сохраняется при сохранении всей статьи.
Извиняюсь за длинный пост, но хотел быть исчерпывающим в моем вопросе.
Буду очень признателен за любые советы, включая альтернативные подходы, которые лучше соответствуют моим целям.
Я смотрел трансляции, связанные с вложенными формами и вложенными маршрутами, и прочитал все, что я могу найти в Интернете, но не нашел решения проблемы / model / new / submodel / new form.
Большое спасибо.