Вложенные формы маршрутов ресурсов с множеством - автоматическое связывание ассоциаций - PullRequest
0 голосов
/ 16 октября 2019

Я вижу некоторые сообщения, касающиеся вложенных форм ресурсов, но ни одна из них не описывает, как можно автоматически заставить вложенный ресурс использовать родителя для ассоциации. Когда я публикую свою форму, она запускает ошибку проверки присутствия «Проект не может быть пустым»

У меня есть проекты, которые имеют много оценок, которые имеют много позиций.

Теперь, скажем, я 'm создаёт форму для оценок на

/project/:project_id/estimates/new

Эта форма имеет внутри себя отношение многих позиций. Также обратите внимание, что оценки - это вложенный ресурс в проектах для моей маршрутизации.

<%= form_for([@project, @estimate], html: {class: "form"}) do |f| %>
...
    <%= f.fields_for :estimate_line_items do |estimate_line_item| %>
...

Я бы предпочел не публиковать код для представления, так как он имеет МНОГО дополнительных элементов и структуры. Просто стоит отметить, что у меня нет входных данных для каких-либо идентификаторов (интересно, требуется ли это или нет, см. Вопросы).

Мои вопросы:

1) Как создать форму впросмотреть код?

2) Рельсы автоматически связывают связанные элементы и идентификаторы или нам нужен скрытый ввод с идентификатором?

1 Ответ

1 голос
/ 16 октября 2019

По умолчанию, так как рельсы 5, belongs_to отношения требуются. Это означает, что значение должно быть установлено при сохранении. Для вложенных элементов это означает, что у вас есть два варианта: либо сделать belongs_to необязательным, либо указать, какие отношения являются взаимно обратными, чтобы рельсы могли сделать вывод, что требование выполнено перед сохранением !

* 1006. * Так что в вашем случае я бы предположил что-то вроде
class Project 
  has_many :estimates, inverse_of: :project 

class Estimate 
  belongs_to :project 
  has_many :estimate_line_items, inverse_of: :estimate  

class EstimateLineItem 
  belongs_to :estimate 

Кроме того, ваш случай немного особенный, поскольку у вас есть вложенная форма на вложенном маршруте. Вложенная форма обрабатывает все идентификаторы автоматически, но @project_id из маршрута не вставляется в форму: вы должны сделать это самостоятельно, поэтому не забудьте добавить f.hidden_field :project_id, value: @project.id в вашу форму.

...