On Tue, Oct 21, 2008 at 2:33 AM, Mark Reginald James <[EMAIL PROTECTED]>wrote:

>
> Md. Kazim Zaidi wrote:
> > Hello everyone,
> > This is my first post to this list, so kindly remind me if I do
> > something wrong. :-P
> >
> > When parent objects are saved, all the new children are saved.
> > However, when the child objects validate themselves, they fail because
> > the foreign key is nil.
> > Domain logic in my application requires complex validations, which
> > will just fail because the associated object is nil. I'm trying to
> > illustrate using an over-simplified example:
> >
> > (also pasted at http://pastie.org/295133)
> > *** Schema ***
> > User(id, name, age)
> > Book(id, title, author_id)
> >
> > *** app/models/user.rb ***
> > class User < ActiveRecord::Base
> >   has_many :books, :foreign_key => 'author_id'
> > end
> >
> > *** app/models/book.rb ***
> > class Book < ActiveRecord::Base
> >   belongs_to :author, :class_name => 'User', :foreign_key =>
> > 'author_id'
> >
> >   validates_presence_of :author_id
> > end
> >
> > *** ./script/console ***
> > u = User.new(:name => 'Shakespeare', :age => 444)
> > u.books.build(:title => 'The Comedy of Errors')
> > u.save!
> >   ActiveRecord::RecordInvalid: Validation failed: Books is invalid
> >
> > Bad Solution: Remove validates_presence_of :author_id from Book model.
> > This makes the model unsafe, but things work.
> >
> > I hope I'm not following the best practices and somebody enlightens
> > me. But if this is meant to be in this way, then how do I implement my
> > validations on a Book?
>
> Use validates_presence_of :author instead.
>
> Currently you also have to do the build like
> u.books.build(:title => 'The Comedy of Errors', :author => u)


Thanks a lot! That does work.
Currently? Is it about to be changed in 2.2?

The API doesn't document this explicitly, and the fact that I need to pass
author as parameter too isn't very obvious, IMHO.

Thanks again. :-)

-- 
- Kazim Zaidi
Blog: http://tuxplayground.blogspot.com

--~--~---------~--~----~------------~-------~--~----~
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