由于一些奇怪的原因,我在两个不同的场合下发出了两个不同的值。
$ puts @project.to_yaml
给出:
id: 3
title: '123'
created_at: 2014-04-07 23:54:18.253262000 Z
updated_at: 2014-04-09 09:20:33.847246000 Z
amount_donated: 50000
和
$ @project.amount_donated
给出:
nil
向我解释这个,因为我非常失落。
修改 项目模型
class Project < ActiveRecord::Base
require 'date'
attr_accessor(:amount_donated)
before_save :convert_params
def convert_params
if amount_donated.present?
value = amount_donated.to_s.split(',').join
value = value.to_f * 100
update_column(:amount_donated, value.to_i)
end
end
end
答案 0 :(得分:1)
update_column(:amount_donated, value.to_i)
表示您有一列amount_donated
,但attr_accessor :amount_donated
表示您有一个虚拟属性。那是哪一个呢?
我建议删除attr_accessor :amount_donated
修改强>
attr_accessor :amount_donated
做了类似的事情:
class Project < ActiveRecord::Base
require 'date'
before_save :convert_params
def amound_donated
@amount_donated
end
def amound_donated=(value)
@amount_donated = value
end
def convert_params
if amount_donated.present?
value = amount_donated.to_s.split(',').join
value = value.to_f * 100
update_column(:amount_donated, value.to_i)
end
end
end
因此,当您访问@project.amount_donated
时,实际上是访问了getter方法amount_donated
而不是列(ActiveRecord getter)。
似乎to_yaml
看到了列而不是ActiveRecord的getter。
答案 1 :(得分:0)
试试这个,可能是您正在使用@project
@project.reload.amount_donated