tag resultados rails formularios form filtrar anidados ruby-on-rails forms crud hidden-field

ruby-on-rails - resultados - formularios anidados rails



Rieles: actualice un solo atributo: enlace con acción personalizada o formulario con campos ocultos. (1)

Digamos que tengo un modelo de usuario, con un campo facebook_uid correspondiente a la identificación de Facebook del usuario.

Quiero permitir que el usuario desvincula su cuenta de Facebook. Hazlo, necesito establecer este atributo en cero.

Actualmente veo 2 maneras de hacer esto

Primera forma: crear una acción personalizada y vincularla

# app/controllers/users_controller.rb def unlink_facebook_account @user = User.find params[:id] # Authorization checks go here @user.facebook_uid = nil @user.save # Redirection go here end # config/routes.rb ressources :users do get ''unlink_fb'', :on => :member, :as => unlink_fb end # in a view = link_to "Unlink your facebook account", unlink_fb_path(@user)

Segunda forma: crear un formulario para la acción de actualización existente

# app/views/user/_unlink_fb_form.html.haml = form_for @user, :method => "post" do |f| = f.hidden_field :facebook_uid, :value => nil = f.submit "Unlink Facebook account"

No soy un gran admirador de ninguna manera.

  • En el primero, tengo que agregar una nueva acción para algo que el controlador de actualización ya puede hacer.

  • En el segundo, no puedo establecer el facebook_uid en cero sin personalizar la acción de actualización, y no puedo tener un enlace en lugar de un botón sin agregar algo de javascript.

Aún así, ¿cuál recomendaría como la mejor y más elegante solución para este contexto? ¿Perdí una tercera alternativa?

Solución (sugerida por Abdullah Jibaly)

Use un enlace a la acción de actualización, con el atributo para actualizar como parámetros; y manejar el caso cuando el atributo se establece en 0

= link_to "Unlink your facebook account", user_path(@user, :user => { :facebook_uid => 0}), :method => :put, :confirm => "Are you sure?"


No estoy seguro de cómo son sus rutas, pero si tiene una acción de actualización, debería funcionar con el link_to. Si utiliza el enlace, asegúrese de utilizar un método de PUT o POST (idealmente PUT porque es una actualización):

link_to("Unlink your facebook account", user_path(@user, :facebook_uid => nil), :method => :put, :confirm => "Are you sure?")