Вложенные помощники формы и маршрута для самостоятельных соединений? - PullRequest
0 голосов
/ 29 января 2020

Могу ли я транскрибировать примеры, приведенные в Руководстве помощника по форме представления действий (https://guides.rubyonrails.org/form_helpers.html#nested -формы ), для вложенных форм во вложенные формы и пример, приведенный в Руководстве по маршрутам (https://guides.rubyonrails.org/routing.html#nested) -ресурсы ) для вложенных ресурсов в случае самостоятельных соединений, как описано в Руководстве по ассоциациям (https://guides.rubyonrails.org/association_basics.html#self -соединения )

самостоятельные соединения

class Employee < ApplicationRecord
  has_many :subordinates, class_name: "Employee",
                          foreign_key: "manager_id"

  belongs_to :manager, class_name: "Employee", optional: true
end

Пример помощников по вложенным формам

<%= form_with model: @person do |f| %>
  Addresses:
  <ul>
    <%= f.fields_for :addresses do |addresses_form| %>
      <li>
        <%= addresses_form.label :kind %>
        <%= addresses_form.text_field :kind %>

        <%= addresses_form.label :street %>
        <%= addresses_form.text_field :street %>
        ...
      </li>
    <% end %>
  </ul>
<% end %>

Пример помощников по вложенным маршрутам

resources :magazines do
  resources :ads
end

1 Ответ

0 голосов
/ 29 января 2020

Нет никакой разницы между самостоятельным объединением и любым другим типом ассоциации, когда речь идет о маршрутизации или формах.

Ваши маршруты на самом деле не заботятся о ваших моделях *. Они просто объявляют набор правил маршрутизации, которые соответствуют входящим запросам к контроллерам. Так что они меньше заботятся о ваших связях. Вы можете объявить свои маршруты RESTful так, как вы хотите, и вы как программист, который фактически определяет, как это соответствует вашим моделям. Тот факт, что таблица является самосоединением, является деталью реализации и фактически не имеет никакого отношения к тому, как вы должны структурировать приложение.

Ваши формы также не заботятся вообще. Когда вы используете f.fields_for :subordinates, он просто вызывает метод subordinates в вашей модели и повторяет его. Он не знает или не заботится о базовых таблицах. То же самое относится к accepts_nested_attributes. Это своего рода абстракция, которую обеспечивают ассоциации.

...