2010-10-27 73 views
2

對象的狀態,我有以下代碼:ActiveRecord的:更改並保存內部模型

def incoming_acceptation(incoming_code) 
    if invite_code == incoming_code 
     accepted = true 
     self.save 
     true 
    else 
     false 
    end 
    end 

不過,這並不改變並儲存接受真實的,它保持在先前的狀態,假的。

@i.incoming_acceptation(incoming_code) => true 
@i.accepted => false 

回答

3
self.accepted = true 
+0

我試過一個沒有工作......然後我感到困惑。不管怎樣,謝謝。 – rtacconi 2010-10-27 10:45:03

+2

值得指出的是,其原因是沒有'self.','accepted'被解釋爲'incoming_acceptation'中的局部變量,因此賦值不會更改屬性值。 – mikej 2010-10-27 11:57:35

4

我建議:

def incoming_acceptation(incoming_code) 
    update_attribute(:accepted, true) if invite_code == incoming_code 
end 

update_attribute將改變並保存屬性。還有update_attributes(注意s)接受哈希一次更改多個屬性:

@obj.update_attributes(:accepted => true, :accepted_at => Time.now) 

注:update_attributeupdate_attributes都在你的例子返回true時的變化和保存是成功的,就像。