Rails变量返回两个不同的值?

时间:2014-04-09 09:58:16

标签: ruby-on-rails ruby ruby-on-rails-4

由于一些奇怪的原因,我在两个不同的场合下发出了两个不同的值。

$ 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

2 个答案:

答案 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