Jeremy, Thanks I'll mull that over and see what I can do with it. I appreciate all the help.
Scott On Sat, Jul 11, 2009 at 10:39 PM, Jeremy Evans <[email protected]>wrote: > > On Jul 11, 7:45 pm, Scott LaBounty <[email protected]> wrote: > > OK, I'm getting confused with the foo, bar, baz thing. I'm trying to do > > something very similar (in fact I was going to ask before I saw this > > thread). I have a library app. with books and locations. Each book can > have > > many locations and each location can have many books. What I'm trying to > add > > is a "total" and a "checked_out" value for each book at each location. > Based > > on the above, what I have for my tables are (from my migration): > > > > > > create_table(:books) do > > primary_key :id > > String :title > > end > > > > create_table(:locations) do > > primary_key :id > > String :location > > end > > > > create_table(:books_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 > > end > > > class BookLocation < Sequel::Model > many_to_one :book > many_to_one :location > > end > > > > The BookLocations is what I gather from Jeremy's post that I need (should > > those lines be "many_to_many" though? > > > > Now though, I'm not sure what I need to add to the Book model to let me > add > > count and checked_out values (and change them) for a given destination. > > > > Thoughts? > > The association modification methods are fairly generic, for domain > specific behavior like you probably need, you probably should write > your own methods that use the BookLocation model. Something like: > > class Location > def purchase(book, copies=1) > bl = book_location(book) > bl ? bl.update(:copies=>bl.copies+copies) : BookLocation.create > (:book=>book, :location=>self, :total=>copies, :checked_out=>0) > end > def sold(book, copies=1) > bl = book_location(book) > bl.update(:copies=>bl.copies-copies) > end > def checkout(book) > bl = book_location(book) > bl.update(:checked_out=>bl.copies+1) > end > def checkin(book) > bl = book_location(book) > bl.update(:checked_out=>bl.copies-1) > end > def book_location(book) > book_locations_dataset[:book_id=>book.id] > end > end > > That's just a guess based on the probable needs of your app. > > 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 -~----------~----~----~----~------~----~------~--~---
