Definiendo una acción PUT


#1

Estoy modificando mi fichero de rutas para mi aplicación, hay una acción
que hace lo siguiente:

def replace
begin
@player1 = Player.find(params[:replacement][:player1])
@player2 = Player.find(params[:replacement][:player2])
@player1.replace_by(@player2)
rescue
flash[:notice] = “You must select 2 players to make a substition”
end
respond_to do |format|
format.html {redirect_to team_club_path}
format.xml {render :xml => [@player1, @player2]}
end
end

En la vista se hace básicamente esto (me he saltado todos los campos que
no son del formulario realmente):

<% form_for :replace, :url => replace_club_path(@club) do |f| %>
<%= radio_button(“replacement”, “player1”, player.id) %>
<%= radio_button(“replacement”, “player2”, player.id) %>
<%= f.submit ‘Replace’ %>
<% end %>

Para mí, esa acción se correspondería más con el verbo put ya que se
hace una modificación sobre el estado de mi servidor (no se crea un
recurso nuevo).

Sin embargo si lo defino de esa forma, cuando pulso el botón submit me
sale lo siguiente:

Unknown action

No action responded to 1. Actions: create, destroy, edit, index, new,
replace, show, team, and update

Sin embargo si la defino como post funciona perfectamente ¿A qué es
debido esto?


#2

Que tienes en el archivo de rutas??

2009/4/27 Carlos Belizón removed_email_address@domain.invalid


#3

Emili Parreño wrote:

Que tienes en el archivo de rutas??

2009/4/27 Carlos Belizón removed_email_address@domain.invalid

map.resources :rounds
map.resources :seasons
map.resources :leagues
map.resources :match_generals
map.resources :users
map.resource :user_session
map.resources :clubs, :member => {:team => :get, :replace => :post}
map.resources :players
map.home ‘’, :controller => “home”, :action => “index”

Así funciona, si cambio a:

map.resources :clubs, :member => {:team => :get, :replace => :put}

Da el error de antes.


#4

Si cambias esta linea:

<% form_for :replace, :url => replace_club_path(@club), :html =>
{:method =>
:put} do |f| %>

anda?


#5

Carlos Belizón wrote:

Ruben Davila wrote:

Si cambias esta linea:

<% form_for :replace, :url => replace_club_path(@club), :html =>
{:method =>
:put} do |f| %>

anda?

Si cambio eso y en mi fichero de rutas la acción replace es de tipo
:put, me sale el siguiente error:

wrong number of arguments (0 for 1)

Eyy, perdona sí que funciona como has dicho, el error era de otra
modificación que hice, ¿Sabrías decirme por qué funciona ahora?

Gracias


#6

Ruben Davila wrote:

Si cambias esta linea:

<% form_for :replace, :url => replace_club_path(@club), :html =>
{:method =>
:put} do |f| %>

anda?

Si cambio eso y en mi fichero de rutas la acción replace es de tipo
:put, me sale el siguiente error:

wrong number of arguments (0 for 1)


#7

2009/4/28 Carlos Belizón removed_email_address@domain.invalid

Eyy, perdona sí que funciona como has dicho, el error era de otra
modificación que hice, ¿Sabrías decirme por qué funciona ahora?

Rails simula los verbos PUT y DELETE mediante un campo oculto en el
formulario, que es lo que consigues con :html => {:method => :put},
compruébalo en la fuente. Sin ese campo oculto, Rails se toma esa
peticion
como lo que es, un POST normal y corriente.


#8

Si no me equivoco es porque con ese cambio estás indicando que el
método a usar es PUT, por defecto el helper pondrá un POST.

El 28/04/2009, a las 17:08, Carlos
Belizón escribió:

Carlos Belizón wrote: