Validation Rails 3带有“模型和验证的U获取错误”;命名错误:未定义的方法“标记用于销毁”和“x27”&引用;
我曾尝试添加中所写的自定义验证,但我遇到了一个奇怪的错误:“NoMethodError:未定义的方法‘marked_for_destruction?’for Money” 我不明白怎么了 你能帮我吗 型号: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
# == 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'