Rails 3 — как определить URL, по которому будет отправлена форма

#ruby-on-rails-3 #forms #url #methods

#ruby-on-rails-3 #формы #url #методы

Вопрос:

Я хотел бы спросить, есть ли какое-то правило для действия, где находится форма отправки… Если у меня есть встроенный контроллер

   def edit
    @shop = Shop.find(params[:id])
  end
  

Вид:

 <%= form_for(@shop, :html => {:multipart => true}) do |f| %>
  

Итак, в исходном коде HTML есть:

 <form accept-charset="UTF-8" action="/shops/11" class="edit_shop" enctype="multipart/form-data" id="edit_shop_11" method="post">
  

И это означает, что эта форма будет отправлена на : контроллер => ‘магазины’, : действие => ‘обновление’.

И я пытаюсь изменить это действие, где будет отправляться форма. Я пробовал что-то вроде этого:

 <%= form_for(@shop, :url => {:controller => 'shops', :id => params[:id], :action => 'aupdate'}, :html => {:multipart => true}) do |f| %>
  

Но в исходном коде HTML есть

 <form accept-charset="UTF-8" action="/shops/aupdate?id=11" class="edit_shop" enctype="multipart/form-data" id="edit_shop_11" method="post">
  

Я хотел бы спросить — как возможно, что форма не отправляется при действии update в этом случае? И что для этого нужно было бы сделать?

Спасибо

Ответ №1:

на ваш взгляд:

 <%= form_for :shop, :url => {:controller => 'shops', :action => 'aupdate', :id=> params[:id]}, :html=> {:id => "some-form-id", :multipart => true} do |f| %>

 .......

<% end %>
  

в ваших маршрутах:

 resources :shops do
   collection do
    ....
     post :aupdate
    ....
   end
end
  

в вашем контроллере:

 def aupdate
   ....
   puts "ssssssssssssssssssssssssssss",params.inspect
   ....
end
  

Комментарии:

1. Почему вы используете put? ваша форма отправляет запрос ‘post’. Используйте post в файле routes.rb. ресурсы: магазины помещают :aupdate, :on => :конец участника