Я разрабатываю REST Api для заводских генераторов приложения, чтобы можно было также создавать экземпляры модели с помощью REST, и мне интересно, как я могу разрешить вложенные атрибуты модели без жесткого кодирования атрибутов.
Предположим, у меня есть модель под названием Ресторан
class Restaurant < ApplicationRecord
has_one :cost, dependent: :destroy, inverse_of: :grant
has_one :address, dependent: :destroy, inverse_of: :grant
has_one :owner, dependent: :destroy, inverse_of: :grant
accepts_nested_attributes_for :cost, :address, :owner
...
, где его ассоциации также имеют свои собственные атрибуты модели и фабрику
FactoryGirl.define do factory :restaurant, class Restaurant do
after(:create) do |restaurant|
restaurant.cost = assign_attributes(attributse_for(:cost_factory))
restuarnat.address = assign_attributes(attributes_for(:address_factory))
restaurant.owner = assign_attributes(attributes_for(:owner_factory))
end
...
end
, где его вложенные ассоциации также имеют свою собственную фабрику. Я передаю тело JSON через REST API в этом формате
{
"restaurant": {
"cost_attributes": {
"staff": 123
"tables": 123
}
}
Я знаю, что могу разрешить атрибуты таким образом
params.permit(:restaurant)
.permit(cost_attributes: [:staff, :tables],
address_attributes: [:address_attr_1],
owner_attributes: [:owner_attr_1]]
но у реальной модели, над которой я работаю, много ассоциаций. Будет больно жестко все кодировать. Есть ли способ, которым я могу разрешить передачу параметров вместо жесткого кодирования в моем контроллере? В настоящее время это то, что я думаю
params.permit(Restaurant.nested_attributes_options.keys)
но, очевидно, это не сработает.