2012-11-09 37 views
1

我有一个模型,某些记录必须在用户输入后自动填充。Rails模型before_save与MD5摘要

然后我用before_save回调,但记录不会被存储。

这是我的模型:

before_save :create_relation_plus_md5 
has_many :bridges 
attr_accessible :id, :admin_user_id, :md5, :url, :name, :cBox 

validates_presence_of :name 
validates_uniqueness_of :name 



def create_relation_plus_md5 
    baseUrl = "http://www.mysite.com/?id=" 
    digest = Digest::MD5.hexdigest("#{name}#{id}#{someOtherData}") 
    puts "digest : #{digest}" 
    md5 = digest 
    url = "#{baseUrl}#{digest}" 
    # + create relations 
end 

的MD5和网址也不会被保存,我想我错过了什么。也许我必须在方法中明确地调用save

我可以做一个变通方法与after_save和手动回拨模式,但当然,这创造一个无限循环......

回答

3

你需要的,如果你要调用一个setter方法明确地引用自己。否则,你将分配给本地变量

md5 = "foo" # local variable 
self.md5 = "foo" # method call, value will be stored in the instance. 
+0

感谢您的答案,它的工作原理!我知道我错过了一些东西;) – damoiser