RoR5 - дублирование БД с отношением «многие ко многим» - PullRequest
0 голосов
/ 13 февраля 2019

Я довольно новичок в 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 %>

Большое спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...