Мне нужно представить форму, которая не поддерживается моделью AR. (Я знаю, что этот вопрос задавали десятки раз по-разному, но, несмотря на большое количество прочитанных экспериментов, я все еще не могу понять его правильно.)
Простейший способ описать то, что мне нужно, - это обратный инжиниринг: предположим, мне нужна форма с полем «имя пользователя» и полем «код доступа». Тогда я хочу, чтобы кнопка [submit] позвонила:
ServicesController#update
с хэшем params, установленным (как минимум):
params={"service"=>{"credentials"=>{"username"=>"fred", "accesscode"=>"1234"}}, "commit"=>"update credentials", "action"=>"update", "controller"=>"services", "id"=>"54"}
или, возможно, просто
params={"credentials"=>{"username"=>"fred", "accesscode"=>"1234"}, "commit"=>"update credentials", "action"=>"update", "controller"=>"services", "id"=>"54"}
где '54' - это идентификатор объекта Services, который я хочу обновить. (Мой метод update () извлекает учетные данные из хэша params и делает с ними правильные действия.) (Я не показал маршруты, но не уверен, что это уместно здесь.)
Но я еще не понял, как получить form_tag или form_for, чтобы соответствовать моим ставкам. Предложения?
Обновление
В соответствии с рекомендациями апертуры ниже, form_tag кажется правильным. Я получаю ошибку маршрутизации «Не найдено ни одного маршрута» / services / 54 ». Прежде чем я изменю свои текущие маршруты, у меня есть:
resources :premises, :shallow => true do
resources :services
end
, что дает мне (частично):
edit_service GET /services/:id/edit(.:format) {:action=>"edit", :controller=>"services"}
service GET /services/:id(.:format) {:action=>"show", :controller=>"services"}
PUT /services/:id(.:format) {:action=>"update", :controller=>"services"}
DELETE /services/:id(.:format) {:action=>"destroy", :controller=>"services"}