Для моего проекта мне нужны пользовательские URL, которые не должно быть легко угадать, как это происходит с увеличением числа объектов.Чтобы решить эту проблему, я дал своим объектам атрибут unique_id, который является строкой, и написал семь действий, которые будут сгенерированы самим resources :objects
, который выглядит следующим образом:
get '/objects' => 'objects#index', as: :objects
post '/objects' => 'objects#create'
get '/objects/new' => 'objects#new', as: :new_object
get '/:unique_id/edit' => 'objects#edit', as: :edit_object
get '/:unique_id' => 'objects#show', as: :object
put '/:unique_id' => 'objects#update'
delete '/:unique_id' => 'objects#destroy'
Все это прекрасно работает, яЯ просто должен был сказать контроллеру, чтобы он нашел Объекты через Object.find_by_unique_id(params[:unique_id])
вместо Object.find(params[:id])
. Я могу создать, прочитать и удалить идеально, но я не могу обновить.
Когда я открываю edit_object_path, он правильно отображает форму, но когда я нажимаю «Обновить объект», он облажается.Из вывода WEBrick я вижу, что он создает запрос PUT, но он запрашивает идентификатор объекта, а не unique_id.Так, например, вместо запроса PUT /osefushe7398hr9
он сообщает PUT /26
.Метод update даже не вызывается, но вместо этого он просит создать новый объект с unique_id, равным 26.
Я действительно не знаю, где изменить это поведение или как передать уникальный_ид вместо идентификатора,