Я довольно новичок в RoR и для обучения я хотел бы создать небольшое приложение, в котором я могу создавать и хранить некоторые действия.У меня также есть категории для этих видов деятельности, и отношение между ними много ко многим.Мне удается иметь поле «категория» в форме создания деятельности, но когда я ее создаю, категория не сопоставляется должным образом с уже существующей в таблице, но она создает новое с тем же именем.
Например, у меня есть категория с именем «Спорт» и идентификатором «1», я создаю с помощью формы новую активность под названием «Бег» и в поле категории я устанавливаю «Спорт».Это создаст запись в таблице категорий, но с идентификатором «10».
Основной целью было бы иметь поле, в котором я мог бы начать писать имя категории, и отображалось бы завершение со всеми соответствующими категориями.имена и не позволяют вводить несуществующую категорию, и тогда связанная категория будет той, которая уже сохранена в БД.
Вот мой код:
activity.rb
class Activity < ApplicationRecord
has_and_belongs_to_many :categories
accepts_nested_attributes_for :categories,
reject_if: lambda { |attrs| attrs['name'].blank? },
allow_destroy: true
end
category.rb
class Category < ApplicationRecord
has_and_belongs_to_many :activities
end
activity_controller.rb
def new
@activity = Activity.new
@activity.categories.build
end
def create
@activity = Activity.new(activity_params)
redirect_to administration_activities_path
end
def activity_params
params.require(:activity).permit(:name, :active, categories_attributes: [:name])
end
Форма для добавления задания
<%= form_with(model: @activity) do |f| %>
<div class="field">
<%= f.label :name, "Name" %>
<%= f.text_field :name, autofocus: true %>
</div>
<% if logged_in?(:admin) %>
<div class="field">
<%= f.label :active, "Enabled" %>
<%= f.check_box :active %>
</div>
<% end %>
<%= f.fields_for :categories do |cat| %>
<div class="nested-fields">
<%= f.label :id, "Catégorie" %>
<%= f.text_field :id %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Большое спасибо за помощь