2011-05-22 11 views
7

Me preguntaba, tengo un modelo que, además de los identificadores de otros modelos (FK), que tiene un solo atributo boolean. Quiero saber cómo puedo crear un botón que cambia este boolean y justo queRieles: ¿hay alguna forma de actualizar un solo atributo?

Mi modelo en cuestión es ésta:

class Squad 
belongs_to :player 
belongs_to :team 
end 

Quiero crear un botón en la página team#show por lo que el player que posee este team puede cambiar el boolean de squad. ¿Cómo puedo hacer esto y cómo se verían mis controladores?

gracias :)!

operación -Editar-

estoy usando un enlace como este:

<%=link_to("Change status", squad_path(sqd, :status => true), :method => :put, :confirm => "Sure?")%> 

Dónde sqd es parte de mi consulta. ¿Este enlace está mal?

Respuesta

12
<%= link_to("Change status", squad_path(sqd, "squad[status]" => true), :method => :put, :confirm => "Sure?") %> 

en su controlador (que es bastante común)

def update 
    @squad = Squad.find params[:id] 
    if @squad.update_attributes params[:squad] 
    ... 
    end 
end 
+0

Gracias! Esa era la parte que faltaba :) – Samth

+0

.update_attributes [: squad] would not work !! –

+1

@Aditya Sanghi, sí, es sólo una escribe mal, por supuesto, y no es el punto de la respuesta – fl00r

0

¿Cuál es el nombre de sus atributos?

Dado que pertenece a player, puede acceder a él con player.squad.name_of_your_attributes = new_value. No olvide marcar save su objeto si desea que los cambios se guarden en su base de datos.

Además, se podía leer that

EDIT: fl00r respondió a su pregunta editada, sin necesidad de que yo repito lo que escribió.

+0

Gracias por la respuesta. Edité mi pregunta. ¿Podrías cambiar el enlace de mi enlace al que propusiste? :) – Samth

3

Sí, sí. El método se llama "atributo_actualización". Toma dos argumentos, el nombre del campo y el valor.

squad.update_attribute(:boolean_field,true) # or false 

Basado en cuestión actualizada

def update 
    @squad = Squad.find(params[:id]) 
    if @squad.update_attribute(:status,params[:status]) 
    ... 
    end 
end 
+0

Gracias por la respuesta :). Intento crear un enlace pero no funciona, está actualizando todos los modelos de la página:/ Tengo una consulta para encontrar los escuadrones en cuestión, ¿cree que es la mejor manera o hay otra? posible cosa que podría hacer? – Samth

Cuestiones relacionadas