Validation Rails 3带有“模型和验证的U获取错误”;命名错误:未定义的方法“标记用于销毁”和“x27”&引用;

Validation Rails 3带有“模型和验证的U获取错误”;命名错误:未定义的方法“标记用于销毁”和“x27”&引用;,validation,activerecord,ruby-on-rails-3.2,Validation,Activerecord,Ruby On Rails 3.2,我曾尝试添加中所写的自定义验证,但我遇到了一个奇怪的错误:“NoMethodError:未定义的方法‘marked_for_destruction?’for Money” 我不明白怎么了 你能帮我吗 型号: # == Schema Information # # Table name: transactions # # id :integer not null, primary key # text :stri

我曾尝试添加中所写的自定义验证,但我遇到了一个奇怪的错误:“NoMethodError:未定义的方法‘marked_for_destruction?’for Money”

我不明白怎么了

你能帮我吗

型号:

# == Schema Information
#
# Table name: transactions
#
#  id                  :integer          not null, primary key
#  text                :string(255)
#  amount_cents        :integer          default(0), not null
#  ...
class Transaction < ActiveRecord::Base
  attr_accessible :text, :amount, ...

  validates :text, :length => { :maximum => 255 }

  composed_of :amount, :class_name => "Money", :mapping => %w(amount_cents cents),
              :converter => Proc.new { |value| Money.to_money(value) }
  validates :amount, :presence => true, :numericality => { :greater_than_or_equal_to  => 0 }
  validates_associated :amount
  ...
end

class Money
  attr_reader :cents

  def initialize(cents)
    @cents = cents
  end

  class << self

    def to_money(str_money)
      cents = (str_money.to_f * 100).to_i
      Money.new(cents)
    end

    def to_money?(str_money)
      /\A\d+(\.\d+)?\z/ == str_money.to_s
    end

  end

  def ==(value)
    @cents == self.class.to_money(value).cents
  end

  def to_i
    @cents
  end

  def to_f
    @cents.to_f
  end

  def to_s
    return nil if @cents.nil?

    unit, subunit = @cents.abs.divmod(100)

    unit_str       = ""
    subunit_str    = ""
    fraction_str   = ""

    unit_str, subunit_str = unit.to_s, subunit.to_s

    subunit_str.insert(0, '0') while subunit_str.length < 2

    absolute_str =  "#{unit_str}.#{subunit_str}#{fraction_str}"

    absolute_str.tap do |str|
      str.insert(0, "-") if @cents < 0
    end
  end

  def inspect
    "#<Money cents:#{@cents} to_s:#{self.to_s}>"
  end  
end
#==架构信息
#
#表名:交易记录
#
#id:整数不为空,主键
#文本:字符串(255)
#金额:整数默认值(0),不为空
#  ...
类事务{:max=>255}
由以下内容组成:金额,:类别名称=>“货币”,:映射=>%w(金额分),
:converter=>Proc.new{| value | Money.to_Money(value)}
验证:amount,:presence=>true,:numericanity=>{:大于或等于0}
验证关联的金额
...
终止
阶级金钱
属性读取器:美分
def初始化(美分)
@美分=美分
终止
类别t=事务处理.new
=> # 
1.9.3p194:002>t.金额=100
=> 100 
1.9.3p194:003>t是否有效?
NoMethodError:未定义的方法“标记了用于销毁的”#
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activerecord-3.2.8/lib/active\u record/validations/associated.rb:5:in“block in validate\u each”
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activerecord-3.2.8/lib/active\u record/validations/associated.rb:5:在“拒绝”中
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activerecord-3.2.8/lib/active\u record/validations/associated.rb:5:in'validate\u each'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active\u model/validator.rb:153:in'block in validate'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active\u model/validator.rb:150:in'each'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active\u model/validator.rb:150:in'validate'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active\u-support/callbacks.rb:310:21之前的“回调”
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active\u support/callbacks.rb:462:in`_run\u 74709952\u validate\u 911291598\u callbacks'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active\u support/callbacks.rb:405:in`\u run\u callback'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active\u-support/callbacks.rb:385:in`_-run\u-validate\u-callbacks'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active\u support/callbacks.rb:81:in'run\u callbacks'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active\u model/validations.rb:227:in'run\u validations!'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active\u model/validations/callbacks.rb:53:in`block in run\u validations!'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active\u support/callbacks.rb:403:in`_run\u 74709952\u验证\u 911291598\u回调'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active\u support/callbacks.rb:405:in`\u run\u callback'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active\u support/callbacks.rb:385:在“运行验证\u回调”中
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active\u support/callbacks.rb:81:in'run\u callbacks'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active\u model/validations/callbacks.rb:53:in'run\u validations!'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active_model/validations.rb:194:in'valid'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activerecord-3.2.8/lib/active_record/validations.rb:69:in'valid'
来自(irb):3
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in'start'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in'start'
from/home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/railties-3.2.8/lib/rails/commands.rb:41:in`'
来自脚本/rails:6:in'require'

否,我已返回MoneyRails否,我已返回MoneyRails
1.9.3p194 :001 > t = Transaction.new
 => #<Transaction id: nil, text: nil, amount_cents: 0, date: nil, created_at: nil, updated_at: nil, transaction_type_id: nil, account_id: nil, user_id: nil, trans_account_id: nil, trans_amount_cents: 0> 
1.9.3p194 :002 > t.amount = 100
 => 100 
1.9.3p194 :003 > t.valid?
NoMethodError: undefined method `marked_for_destruction?' for #<Money cents:10000 to_s:100.00>
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activerecord-3.2.8/lib/active_record/validations/associated.rb:5:in `block in validate_each'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activerecord-3.2.8/lib/active_record/validations/associated.rb:5:in `reject'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activerecord-3.2.8/lib/active_record/validations/associated.rb:5:in `validate_each'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active_model/validator.rb:153:in `block in validate'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active_model/validator.rb:150:in `each'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active_model/validator.rb:150:in `validate'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:310:in `_callback_before_21'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:462:in `_run__74709952__validate__911291598__callbacks'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:405:in `__run_callback'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:385:in `_run_validate_callbacks'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active_model/validations.rb:227:in `run_validations!'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active_model/validations/callbacks.rb:53:in `block in run_validations!'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:403:in `_run__74709952__validation__911291598__callbacks'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:405:in `__run_callback'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:385:in `_run_validation_callbacks'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activesupport-3.2.8/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active_model/validations/callbacks.rb:53:in `run_validations!'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activemodel-3.2.8/lib/active_model/validations.rb:194:in `valid?'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/activerecord-3.2.8/lib/active_record/validations.rb:69:in `valid?'
    from (irb):3
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in `start'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in `start'
    from /home/alexvs/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/railties-3.2.8/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'