Robert,

Thanks so much for the help. Question, though, could you help with
with the routing that would be involved?

On Oct 1, 7:20 pm, Robert Walker <[email protected]>
wrote:
> mlittle wrote:
> > Robert, thanks for the reply. validates_existence_of is a plugin ->
> >http://github.com/bogdans83/validates_existence_of/. I'll try to make
> > this as simple as possible. Here is what i'm trying to do:
>
> Got it. I though maybe that was the case, and might explain some of my
> previous frustrations with testing these associations.
>
> > A's has many B's and B's have 1 C.
>
> > A = Users
> > B = Books
> > C = Libraries
>
> Okay, That makes more sense. Let me first write this as a user story:
>
> Users may check out many books from a library. Users may borrow from
> many libraries. Only one library may own a book (in this design let's
> consider two books with the same title separate books). Books loaned to
> users must be returned to the owning library.
>
> So I see four models here not three:
>
> User
> Library
> Book
> Loan
>
> Feature: Book check out
>   In order to learn cool stuff, or be entertained
>   As a user
>   I want to be able to checkout many books from many libraries
>
>   Scenario: Check from 2 libraries
>     Given I select 'Programming Ruby' from the Public Library
>     And I select 'The Rails Way' from the University Library
>     When I check out from the Public Library
>     And I check out from the University Library
>     Then I should have 2 books
>
> Feature: Book check in
>   In order to prevent late fees
>   As a user
>   I want to be able to check in books
>
>   Scenario: I must return a book to the correct library
>     Given I have 'Programming Ruby'
>     When I check in to the University Library
>     Then the check in should be denied
>     And I should have 2 books
>
> There may be other scenarios to consider, but I wanted to focus on these
> two to help describe the model:
>
> It looks to me like you need a standard many-to-many association with
> some additional validation to make sure the books get returned back to
> the library that owns them.
>
> class User < ActiveRecord::Base
>   has_many :loans
>   has_many :books, :through => :loans
> end
>
> class Loan < ActiveRecord::Base
>   belongs_to :user
>   belongs_to :book
> end
>
> class Book < ActiveRecord::Base
>   has_many :loans
>   has_many :users, :through => :loans
>   belongs_to :library
> end
>
> class Library < ActiveRecord::Base
>   has_many :books
> end
>
> loans_controller.rb
>
>   # DELETE /loans/1
>   # DELETE /loans/1.xml
>   def destroy
>     @loan = Loan.find(params[:id])
>     @loan.destroy if @loan.book.library == current_library
>
>     respond_to do |format|
>       flash[:error] = "This book was
>       format.html { redirect_to(loans_url) }
>       format.xml  { head :ok }
>     end
>   end
>
> I'll leave it as an exercise for you to figure out how to determine the
> "current library" that the user is attempting to return the book to.
>
> Notice that in this design the act of checking in a book is to destroy
> the loan of the book. So loan is a resource in it's own right. Of course
> checking out a book would be to create a new loan.
>
> Note: this code is incomplete and untested with no warrantee of any
> kind. :)
> --
> Posted viahttp://www.ruby-forum.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