Есть несколько вопросов по сильным параметрам, но я не нашел ответа для достижения своей цели. Пожалуйста, извините любые дубликаты (и, возможно, укажите мне правильное направление). Я использую сильные параметры в модели, которая имеет несколько ассоциаций has_one и вложенных атрибутов с accepts_attributes_for.
В моих маршрутах есть: (обновлено для лучшего понимания)
resources :organisations do
resources :contact_details
end
Итак, т.е. для одной связанной модели я должен использовать
def organisation_params
params.require(:organisation).permit(:org_reference, :supplier_reference, :org_type, :name, :org_members, :business, :contact_person, contact_detail_attributes: [:id, :contactable_id, :contactable_type, :phone, :fax, :mail, :state, :province, :zip_code, :street, :po_box, :salutation, :title, :last_name, :first_name, :description])
end
Это работает, но мне нужно повторно ввести все разрешенные параметры для каждой связанной модели. Когда я изменяю разрешенные атрибуты для contact_details , мне приходится изменять их в нескольких местах (в каждой модели, имеющей полиморфную ассоциацию).
Есть ли способ получить белый список параметров contact_details и включить его в родительский белый список?
Что-то вроде:
def organisation_params
my_params = [:org_reference, :supplier_reference, :org_type, :name, :org_members, :business, :contact_person]
contact_params = #get permitted params, that are defined in contact_details_controller
params.require(:organisation).permit(my_params, contact_params)
end
Я не хочу обходить безопасность, но я уже определил разрешенные атрибуты для contact_details и не хочу повторять это в каждой связанной «родительской» модели (потому что это утомительно и очень подвержено глупым ошибкам, таким как пропуск одного атрибута в одна из нескольких родительских моделей).