On 14 Dec 2008, at 10:54, Ryan Bigg wrote:

> Transaction is a reserved class in Rails.

That's not quite the whole story. The issue that if you have  
belongs_to transaction in your model that creates a transaction method  
for reading the association.
This overwrites an internal method called transaction.
The internal method just runs its block inside a database transaction  
and is used on saves etc... By replacing that with a transaction  
method that does nothing with the block you completely neutre  
activerecord.
As of 
http://github.com/rails/rails/commit/455c7f9e37fda2969e52698b766413fc735eb488 
  this won't be a problem any more.

Fred


>
> -----
> Ryan Bigg
> Freelancer
> http://frozenplague.net
>
>
>
>
>
>
>
> On 14/12/2008, at 9:13 PM, Greg Hauptmann wrote:
>
>> still stuck here
>>
>> When I create a new "allocation" model object, I check it is valid  
>> OK, but when I "save!" it I just get a "nil"?  What would this  
>> imply.  There's no error as such.  It is true to say that I  
>> populated the non-null columns with relationship with ID's of just  
>> "1" (i.e. didn't ensure there was actually a matching record in  
>> their tables).  Also the DB doesn't have foreign key constraints  
>> for these relationships.   Questions here:
>>
>> Q1 - Does rails check to see that there is a valid object in an  
>> association present before allowing the save?  (i.e. via the fact  
>> that the model has a "belongs_to" in it?
>>
>> Q2 - If it does do this check what would be the expected output  
>> from Rails the object wasn't there in the associated table (e.g. if  
>> one put manually a bad reference ID in)?  Would it be "nil" as I  
>> got?  There wouldn't be a more specific exception raised?   
>> especially if one is using the "save!" method?
>>
>>
>> *** CONSOLE OUTPUT ***
>> >> a = Allocation.new
>> => #<Allocation id: nil, transaction_id: nil, person_id: nil,  
>> recurring_id: nil, amount: nil, amount_percent: nil, created_at:  
>> nil, updated_at: nil>
>> >>
>> ?> a.valid?
>> => false
>> >> a.amount = 1
>> => 1
>> >> a.transaction_id = 1
>> => 1
>> >> a.person_id = 1
>> => 1
>> >>
>> ?> a.valid?
>> => true
>> >>
>> ?>
>> ?> a.save
>> => nil
>> >> a.save!
>> => nil
>>
>> ** SQL FROM ./SCRIPT/SERVER WHEN I DID THE "a.save!" ***
>>   Transaction Columns (0.003291)   SHOW FIELDS FROM `transactions`
>>   Transaction Load (0.001494)   SELECT * FROM `transactions` WHERE  
>> (`transactions`.`id` = 1)
>>
>> ** Model code **
>> #
>>
>> class Allocation < ActiveRecord::Base
>>   belongs_to :person
>>   belongs_to :transaction
>>
>>   validates_numericality_of :amount, :if => :amount
>>   validates_numericality_of :amount_percent, :if => :amount_percent
>>
>>   private
>>
>>   def validate
>>     errors.add_to_base('amount and amount_percent can not both be  
>> specified') if amount && amount_percent
>>     errors.add_to_base('either amount OR amount_percent must be  
>> specified') if !amount && !amount_percent
>>   end
>>
>> end
>>
>>
>>
>>
>> On Fri, Dec 12, 2008 at 5:09 PM, Greg Hauptmann 
>> <[email protected] 
>> > wrote:
>> Hi,
>>
>> I have a model for which when I go to save an item it doesn't seem  
>> to get saved.  In the console I don't get a "record not saved"  
>> error???  But rather the response seems to give me back a  
>> Transaction object (i.e. for which the saved Allocation object has  
>> a relationship with)?  Any ideas why?
>>
>> CONSOLE OUTPUT
>> ?> a = Allocation.new
>> => #<Allocation id: nil, transaction_id: nil, person_id: nil,  
>> recurring_id: nil, amount: nil, amount_percent: nil, created_at:  
>> nil, updated_at: nil>
>> >> a.valid?
>> => false
>> >> a.transaction_id = 1784
>> => 1784
>> >> a.person_id = 1
>> => 1
>> >> a.amount = 100
>> => 100
>> >> a.valid?
>> => true
>> >> a.save!
>> => #<Transaction id: 1784, transaction_date: "2009-02-04",  
>> bank_account_id: 5, category_id: 6, recurring_id: 3, amount:  
>> #<BigDecimal:22291e0,'0.0',4(8)>, balance: #<BigDecimal: 
>> 2229190,'0.1E4',4(12)>, description: "food", notes: nil,  
>> created_at: "2008-12-08 21:21:17", updated_at: "2008-12-08  
>> 21:21:17", projection: true>
>> >> a
>> => #<Allocation id: nil, transaction_id: 1784, person_id: 1,  
>> recurring_id: nil, amount: #<BigDecimal:2218160,'0.1E3',4(8)>,  
>> amount_percent: nil, created_at: nil, updated_at: nil>
>> >>
>>
>> MODEL
>> -----------------------------------------------------------------------------------------------------------------------
>> Macintosh-2:myequity greg$ cat app/models/allocation.rb
>> # == Schema Information
>> # Schema version: 20081128104846
>> #
>> # Table name: allocations
>> #
>> #  id             :integer(4)      not null, primary key
>> #  transaction_id :integer(4)      not null
>> #  person_id      :integer(4)      not null
>> #  recurring_id   :integer(4)
>> #  amount         :decimal(9, 2)
>> #  amount_percent :decimal(9, 2)
>> #  created_at     :datetime
>> #  updated_at     :datetime
>> #
>>
>> class Allocation < ActiveRecord::Base
>>  belongs_to :person
>>  belongs_to :transaction
>>
>>  validates_numericality_of :amount, :if => :amount
>>  validates_numericality_of :amount_percent, :if => :amount_percent
>>
>>  private
>>
>>  def validate
>>    errors.add_to_base('amount and amount_percent can not both be  
>> specified') if amount && amount_percent
>>    errors.add_to_base('either amount OR amount_percent must be  
>> specified') if !amount && !amount_percent
>>  end
>>
>> end
>> -----------------------------------------------------------------------------------------------------------------------
>>
>>
>>
>>
>>
>>
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to