Jeremy,

Thanks, it made it through my test at least. I'll give the real code a try
next. I can't tell you how much I appreciate the help I receive on this
list.

Scott

On Tue, Jul 14, 2009 at 9:00 AM, Jeremy Evans <[email protected]>wrote:

>
> On Jul 14, 8:52 am, Scott LaBounty <[email protected]> wrote:
> > OK, I'm still having some issues with this. Here's what I ended up with
> in
> > my migrations:
> >
> > <<
> >         create_table(:books) do
> >             primary_key :id
> >             String :title
> >         end
> >
> >         create_table(:locations) do
> >             primary_key :id
> >             String :location
> >         end
>
> First, make sure you use the same join table name:
>
>         create_table(:book_locations) do
> >             primary_key :id
> >             foreign_key :location_id, :locations
> >             foreign_key :book_id, :books
> >             Integer :total
> >             Integer :checked_out
> >         end
> >
> >
> >
> > and my models:
> >
> > <<
> > class Book < Sequel::Model
> >     one_to_many :book_locations
> >     many_to_many :locations, :join_table=>:book_locations
> > end
> >
> > class Location < Sequel::Model
> >     one_to_many :book_locations
> >     many_to_many :books, :join_table=>:book_locations
> >
> >     # Create a class method to grab the id, and locations from the
> default
> >     # Location dataset.
> >     def self.all_locations
> >         select(:id, :location).all
> >     end
> >
> >     def purchase(book, copies=1)
>
> I'm not sure this will work as you think.  book_locations will return
> an array of BookLocations, not a single one for the book.  You
> probably want the book_location method I used earlier.
>
> >         bl = book_locations(book)
> >         bl ?
> >             bl.update(:copies=>bl.total+copies) :
> >             BookLocation.create(:book=>book, :location=>self,
> > :total=>copies, :checked_out=>0)
> >     end
> > end
>
> many_to_one takes a singular, not a plural:
>
>  class BookLocation < Sequel::Model(:book_locations)
>       many_to_one :book
>      many_to_one :location
> > end
> >
> >
> >
> > and here's some test code I wrote:
> >
> > b = Book.create(:title => 'Snow Crash')
> > l = Location.create(:location => 'Irvine')
> > bl = BookLocation.create(:book=>b, :location=>l, :total=>1, :checked_out
> =>
> > 0)
> >
> > When I try to add the book location (similar to the purchase() method
> > above), I get an error:
> >
> > Sequel::Error: method book= doesn't exist or access is restricted to it.
>
> Fixing the many_to_one to be singular should solve this.
>
> Jeremy
> >
>


-- 
Scott
http://steamcode.blogspot.com/

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sequel-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/sequel-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to