Проблема
Я пытаюсь создать промежуточную таблицу с именем category_profiles
, это промежуточная таблица для назначения избранных категорий моим профилям, но я не могу получить доступ к category_ids
, который явведите в форму, всегда я получал одну и ту же проверку, категория не существует:
код:
class CategoryProfile < ApplicationRecord
belongs_to :profile
belongs_to :category
end
class Category < ApplicationRecord
has_many :category_profiles
has_many :profiles, through: :category_profiles
class Profile < ApplicationRecord
has_many :category_profiles
has_many :categories, through: :category_profiles
Когда я выполняю действие создания, мой контроллер не может найтимоя категория.Как мне это исправить?
Мое действие создания никогда не находит идентификаторы моих категорий для присвоения category_profiles
.Он имеет много сквозных отношений:
Module Account
class FavoritesController < Account::ApplicationController
before_action :set_category_profile
def index
@favorites = @profile.categories
end
def new
@categories = Category.all
@category_profile = CategoryProfile.new
end
def create
@category_profile = @profile.category_profiles.new(category_profile_params)
if @category_profile.save
flash[:success] = t('controller.create.success',
resource: CategoryProfile.model_name.human)
redirect_to account_favorites_url
else
flash[:warning] = @category_profile.errors.full_messages.to_sentence
redirect_to account_favorites_url
end
end
def destroy
end
private
def set_category_profile
@category_profile = CategoryProfile.find_by(params[:id])
end
def category_profile_params
params.permit(:profile_id,
category_ids:[])
end
end
end
Форма
<%= bootstrap_form_with(model: @category,method: :post , local: true, html: { novalidate: true, class: 'needs-validation' }) do |f| %>
<div class="form-group">
<%= collection_check_boxes(:category_ids, :id, Category.all.kept.children.order(name: :asc), :id, :name, {}, { :multiple => true} ) do |b| %>
<%= b.label class: 'w-1/6 mr-4' %>
<%= b.check_box class: 'w-1/7 mr-4' %>
<%end %>
</div>
<div class="md:flex justify-center">
<%= f.submit 'Guardar categoría favorita', class: 'btn btn-primary' %>
</div>
<% end %>