2010-10-27 43 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时的变化和保存是成功的,就像。