#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
У меня есть две модели. Один из них — категории, а другой — продукты. Я уже заполнил таблицу categories, и теперь мне нужно заполнить таблицу products идентификатором категории. Я использую faker для этой совокупности.
Модели и файл seeds.rb выглядят следующим образом
class Product < ApplicationRecord
belongs_to :categories
end
class Category < ApplicationRecord
has_many :products
end
seeds.rb
category = Category.ids
100.times do
Product.create!([{
name_product: Faker::Commerce.product_name
},
{
value_product: Faker::Commerce.price
},
{
category_id: category.sample
}
])
end
Но я продолжаю получать сообщение об ошибке «проверка не удалась. Категории необходимы «, даже передавая идентификатор категории.
Если я прокомментирую ассоциацию внутри модели продукта, это сработает, но это не решение.
Комментарии:
1. Не могли бы вы подтвердить, что ваша
category
переменная (которую было бы гораздо лучше переименовать вcategory_ids
или аналогичную) определенно содержит массив идентификаторов, пожалуйста?
Ответ №1:
Я думаю, ваша проблема заключается в том, как вы пытаетесь создавать продукты.
Ваш текущий код попытается создать три продукта, поскольку вы передаете массив хэшей, два из которых не имеют идентификатора категории:
Product.create!([
{
name_product: Faker::Commerce.product_name # << first product, no category
},
{
value_product: Faker::Commerce.price # << second product, no category
},
{
category_id: category.sample # << third product
}
])
Из вашего вопроса немного неясно, но попробуйте вместо этого следующее в вашем 100.times do
блоке:
Product.create!(
name_product: Faker::Commerce.product_name,
value_product: Faker::Commerce.price,
category_id: category.sample
)
Или:
Product.create!([
{
name_product: Faker::Commerce.product_name,
category_id: category.sample
},
{
value_product: Faker::Commerce.price,
category_id: category.sample
},
{
category_id: category.sample
}
])
Первый создаст единственную запись, если в каждом экземпляре есть name_product
, value_product
и category_id
столбцы; последние три продукта, все из которых имеют category_id
.
Дайте мне знать, как у вас дела и помогает ли это вообще.
Редактировать
Похоже, ваша ассоциация настроена неправильно. Попробуйте:
class Product < ApplicationRecord
belongs_to :category
end
Комментарии:
1. Это выдает ту же ошибку. ActiveRecord :: RecordInvalid: ошибка проверки: Требуются категории
2. @lufizi Я обновил свой ответ: я думаю, что проблема в настройке ваших ассоциаций. Попробуйте обновить нижний раздел и посмотрите, заработает ли это.
3. Отлично, рад, что это помогло!