2011-08-17 7 views
5

Chciałbym zaktualizować atrybuty w metodzie instancji w szynach bez konieczności zmiany parametrów przekazywanych w taki sposób, aby móc korzystać z automatycznych atrybutów szyn. Oto przykład.Jak aktualizować atrybuty w metodzie instancji w modelu szyn bez używania różnych nazw zmiennych?

Idealny:

status = "some_new_status" 
person.update(status) 

class Person < ActiveRecord::Base 
    def update(status) 
    self.status = status 
    end 
end 

Co mam teraz zrobić:

class Person < ActiveRecord::Base 
    def update(new_status) 
    self.status = new_status 
    self.save 
    end 
end 

rozumiem w tym przypadku tak nie jest wiele kwestii. Ale kiedy mam skomplikowane metody aktualizacji, byłoby znacznie czystsze, gdybym mógł wyeliminować niektóre z tego kodu.

+2

dlaczego cofnąć prezentację na swoje pytanie? – apneadiving

+0

to dobre pytanie; chciałem zobaczyć, czy to całkowicie zmieniłoby to pytanie/przywróciłoby je do zera. –

Odpowiedz

18

Należy użyć wbudowanych Rails metod:

@person.update_attribute(:status, "Some Value") #no callback triggered nor validation 

@person.update_attributes(:status => "Some Value") #can pass multiple values 

Albo zachować swój krótki składnia

def update(status) 
    update_attribute(:status, status) 
end 

Update_attribute doc.

Update_attributes doc.

+3

Trzeba to trochę poprawić. Kiedy używasz metody update_attributes, powinieneś zapisać ją w ten sposób:: status => 'aktywny' – socjopata

+1

@socjopata, dzięki za uwagę :) – apneadiving

+0

nie odpowiada? – apneadiving

Powiązane problemy