Форма для принятия записи и нескольких связанных записей?

Если у пользователя есть_много навыков, и навык принадлежит_пользователю:

class User < ApplicationRecord
  has_many :skills
  validates_length_of :skills, maximum: 5
end
class Skill < ApplicationRecord
  belongs_to :user
  validates_associated :user
end

как создать форму, которая принимает пользователя и множество навыков?

Вот форма с пользователем и одним навыком, но я не могу понять, как заставить его принимать несколько навыков в одной форме?

<%= form_for(@user) do |f| %> 
  
  <%= f.label :bio %><br>
  <%= f.text_field :bio %>

   <%= fields_for "user[skill]", @user.skill do |skill_fields| %>
      <%= f.label :skill %><br>
      <%= skill_fields.text_field :name %>
   <% end %>

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

Обратите внимание, что поля (5) могут отображаться на экране, а не генерироваться динамически с помощью javascript.


person dss    schedule 12.02.2021    source источник
comment
github.com/nathanvda/cocoon — проверьте, помогает ли это   -  person user11350468    schedule 12.02.2021
comment
@ user11350468 ценю это, я посмотрю на кокон. На данный момент я думаю, что предпочитаю использовать ванильные рельсы, если это возможно.   -  person dss    schedule 12.02.2021


Ответы (1)


accepts_nested_attributes_for

Вы можете использовать встроенный Rails accepts_nested_attributes_for.

Пожалуйста, взгляните на вложенные атрибуты активной записи документы, особенно в разделе One-to-many.

А это официальное руководство по созданию формы Rails для accepts_nested_attributes_for10. Создание сложных форм.

person Marian13    schedule 12.02.2021
comment
Спасибо, я уже прочитал всю первую ссылку, но в ней нет кода для представления :( Я также прочитал вторую ссылку (guides.rubyonrails.org/form_helpers.html#nested-forms), но я пропустил раздел 10.2, поэтому сейчас попробую - person dss; 12.02.2021
comment
Я понял, что 10.2 имеет только один адрес для человека. Но в моем примере мне нужно несколько адресов для человека. Можно ли показать, как это сделать в представлении? - person dss; 12.02.2021
comment
Извините, но мне немного непонятно, почему вы говорите, что 10.2 has only one address for the Person? Если я что-то не упустил, класс Person из 10.1 Настройка модели имеет_много :адресов. - person Marian13; 12.02.2021
comment
Спасибо, посмотрю отливку рельсов. Когда я следую инструкциям в 10.2, я проверяю с помощью отладчика, и в представлении создаются 5 записей, но форма генерирует только одно поле формы. Таким образом, пользователь может ввести только один, а не несколько - person dss; 12.02.2021
comment
Я не знаю, что мне не хватает, мой код такой же, как в 10.2. Он автоматически знает, что нужно создать более одного поля, или мне следует создать цикл? (Я слепо/точно следовал разделу 10.2) - person dss; 12.02.2021
comment
Ага, сработало, я забыл form перед form.fields_for ! - person dss; 12.02.2021