Hello,
One of my AR models is failing to save (using rails 2.0.2 and
sqlite3). Both #save and #save return [] (sometimes other values),
but A) nothing ever hits the database, and B) #save! doesn’t throw an
error, even if it’s not a valid model. See the irb session below, as
well as my Order class and migration.
Has this happened to anyone else?
The most unusual thing I’ve done on this project so far is use the
decimal column type in the Order model. I’m going to change it to
float and see if that works, then try my hand at ruby-debug if it
doesn’t.
Many thanks,
-Ed Brannin
t = Transaction.new
=> #<Transaction id: nil, order_id: nil, data: nil, txn_id: nil,
handshake: nil, created_at: nil, updated_at: nil>t.valid?
=> falset.save
=> falset.save!
ActiveRecord::RecordInvalid: Validation failed: Handshake can’t be
blank, Txn can’t be blank, Data can’t be blank
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/validations.rb:946:insave_without_transactions!' from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/transactions.rb:112:in
save!’
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/connection_adapters/abstract/database_statements.rb:
66:intransaction' from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/transactions.rb:80:in
transaction’
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/transactions.rb:100:intransaction' from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/transactions.rb:112:in
save!’
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/transactions.rb:120:inrollback_active_record_state!' from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/transactions.rb:112:in
save!’
from (irb):4o = Order.new
=> #<Order id: nil, name: “”, email: “”, company: “”, gross: nil,
shipping: nil, handling: nil, address: “”, status: “”, created_at:
nil, updated_at: nil>o.valid?
=> falseo.save
=> []o.save!
=> []
class Order < ActiveRecord::Base
validates_presence_of :name, :email, :address
validates_numericality_of :gross, :shipping, :handling,
:greater_than_or_equal_to
=> 0
has_many :transaction
def total
gross + shipping + handling
end
end
…and its migration:
class CreateOrders < ActiveRecord::Migration
def self.up
create_table :orders do |t|
t.string :name, :default => “”, :null => false
t.string :email, :default => “”, :null => false
t.string :company, :default => “”, :null => false
t.decimal :gross, :null => false
t.decimal :shipping, :null => false
t.decimal :handling, :null => false
t.text :address, :default => “”, :null => false
t.string :status, :default => “”, :null => false
t.timestamps
end
end
def self.down
drop_table :orders
end
end
Relevant gem versions:
action_profiler (1.0.0)
actionmailer (2.0.2, 2.0.1, 1.3.6, 1.3.3, 1.3.2, 1.3.1, 1.2.5, 1.2.3,
1.2.2, 1.2.1)
actionpack (2.0.2, 2.0.1, 1.13.6, 1.13.3, 1.13.2, 1.13.1, 1.12.5,
1.12.3, 1.12.2, 1.12.1)
actionwebservice (1.2.6, 1.2.3, 1.2.2, 1.2.1, 1.1.6, 1.1.4, 1.1.3,
1.1.2)
activerecord (2.0.2, 2.0.1, 1.15.6, 1.15.3, 1.15.2, 1.15.1, 1.14.4,
1.14.3, 1.14.2)
activeresource (2.0.2, 2.0.1)
activesupport (2.0.2, 2.0.1, 1.4.4, 1.4.2, 1.4.1, 1.4.0, 1.3.1)
acts_as_versioned (0.2.3)
json (1.1.2, 1.0.2, 0.4.3, 0.4.2)
mongrel (1.1.3, 1.1.2, 1.0.1, 1.0, 0.3.14, 0.3.13.4, 0.3.13.3)
mongrel_cluster (1.0.5, 0.2.1, 0.2.0)
rails (2.0.2, 2.0.1, 1.2.6, 1.2.3, 1.2.2, 1.2.1, 1.1.6, 1.1.4, 1.1.3,
1.1.2)
rails-app-installer (0.2.0, 0.1.5, 0.1.3)
rails_analyzer_tools (1.4.0, 1.1.0)
rspec (1.1.2, 1.1.1, 1.1.0, 1.0.5, 0.7.5.1, 0.7.5, 0.6.4, 0.6.3)
rubygems-update (1.0.1, 0.9.5, 0.9.4)
sqlite-ruby (2.2.3)
sqlite3-ruby (1.2.1, 1.2.0, 1.1.0.1, 1.1.0)
ZenTest (3.8.0, 3.7.2, 3.7.1, 3.6.1, 3.6.0)