excellent thanks - not sure how long I would have looked for this one

I've tried to summarise this on my blog for furture reference at
http://blog.gregnet.org/?p=17 (i.e. on http://blog.gregnet.org)

On Mon, Dec 15, 2008 at 7:59 AM, Frederick Cheung <
[email protected]> wrote:

>
>
> On 14 Dec 2008, at 21:50, Greg Hauptmann wrote:
>
> > PS.  Just adding another followup question if I may:
> >
> > Q1 - For the future should there been a way for me to have worked
> > this out myself?  i.e. without knowing the internals of Rails, but
> > by using log information, trying things in console etc
> >
> might have found it stepping through save with the debugger. I ran
> into this problem myself many moons ago and probably worked it out
> like that.
> > Q2 - Is there a list of  "reserved names" available somewhere one
> > could  use as a check for model names?
>
> Not that I know of.
> > Q3 - Can I assume the best step for me is to just rename my model,
> > and work this change through my code?
> >
> certainly the easiest way out, until 2.3 hits the streets.
>
> > Q4 - Wondering if it would be a good idea to Rails to check for
> > "bad" model names and give a warning?   (similar to warnings like,
> > you not on the optimal mysql driver)
> >
> Rails does try (eg with dangerous attribute names)
>
> Fred
> >
> > Thanks again
> >
> > On Mon, Dec 15, 2008 at 7:39 AM, Greg Hauptmann <
> [email protected]
> > > wrote:
> > wow - thanks heaps
> >
> > For the future should there been a way for me to have worked this
> > out myself?  i.e. without knowing the internals of Rails, but by
> > using log information, trying things in console etc
> >
> > Tks
> >
> >
> > On Sun, Dec 14, 2008 at 11:37 PM, Frederick Cheung <
> [email protected]
> > > wrote:
> >
> >
> > 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