2013-08-01 27 views
0

我想在我的模型中分配ActiveRecord屬性的值,但無論出於何種原因,我都無法設置它們。無法在模型中分配ActiveRecord屬性

舉例來說,我有一個AccountModel,這有一個屬性name

如果我把它從控制器或(如user.name = "John"),一切工作正常的控制檯。 但是,如果我嘗試從模型中設置它,就像

def set_name(new_name) 
    name = new_name 
end 

那麼它不工作。另一方面,檢索名稱,如

def get_name 
    name 
end 

工作得很好。我錯過了什麼? 我使用的是Ruby 2.0.0-p247和Rails 4.0.0;請注意,這些例子並不是真實世界的例子,我只是試圖讓他們簡單明瞭我的問題。

最好的問候, 曼迪

回答

1

嘗試:

def set_name(new_name) 
    self.name = new_name 
end 

您需要使用self關鍵字來引用您的實例上分配屬性。否則,ruby會將您的新名稱分配給一個名爲name的局部變量。

你可能想save更改後

user = User.new 
user.set_name('foo') 
user.save 

看看例子here,有一個類似於你在最後的問題;)

+0

試過之前,也沒有工作 – klaffenboeck

+0

您是否添加了'self'關鍵字?它是在這裏有目的:) –

+0

好吧,現在它工作,但我絕對嘗試過!你有什麼想法,爲什麼在這種情況下自我關鍵字是必要的?! – klaffenboeck

1

您的代碼看起來不錯,但你保存修改?嘗試添加保存撥打:

def set_name(new_name) 
    self.name = new_name 
    self.save 
end 
0

嘗試

def set_name(new_name) 
     self.name = new_name 
     self.save! 
    end 

然後從控制器調用實例方法只需

user.set_name('foo') 
0

您不需要執行self.save,只需在您的模型中調用save即可。當你需要分配時,你只使用self.attribute。

相關問題