Вы можете внести в белый список параметры для любого действия точно таким же образом:
Foo.new( params.require(:foo).permit(:bar) )
# or for a flat hash
Foo.new( params.permit(:foo, :bar) )
Хэш params - это просто объект, похожий на хеш, имеющий флаг permitted
. Вызов .permit
возвращает новый экземпляр ActionController::Parameters
, содержащий только разрешенные ключи и с разрешенным флагом, установленным в true.
Но это неправильный ответ на неправильный вопрос.
Эта проблема не связана с внесением в белый список параметров в индексе, редактированием и отображением параметров, а скорее в том, что ваше приложение использует параметры для создания / обновления моделей из GET-запроса в первую очередь.
Все маршруты действий по индексированию, редактированию и показу соответствуют запросам GET, которые должны быть идемпотентными (они вообще не должны изменять ресурсы). Это особенно важно, поскольку они сохраняются в истории браузеров, что может привести к неожиданным последствиям, если пользователь нажмет кнопку «Назад».
Prefix Verb URI Pattern Controller#Action
things GET /things(.:format) things#index
POST /things(.:format) things#create
new_thing GET /things/new(.:format) things#new
edit_thing GET /things/:id/edit(.:format) things#edit
thing GET /things/:id(.:format) things#show
PATCH /things/:id(.:format) things#update
PUT /things/:id(.:format) things#update
DELETE /things/:id(.:format) things#destroy
Хотя методы GET могут принимать параметры, они, как правило, не должны выполнять какого-либо массового присвоения модели.
Только белые действия create
и update
, которые соответствуют неидемпотентным методам POST
и PUT|PATCH
, должны относиться к созданию белого списка параметров. Вы должны убедиться, что ваш ajax-вызов отправляется по правильному пути и использует правильный метод HTTP.