It also depends how optimal your SQL ends up.

Blog: http://random8.zenunit.com/
Learn rails: http://sensei.zenunit.com/

On 01/04/2009, at 11:28 PM, Harold <[email protected]> wrote:

>
> I think this is a common 'dilemma' that comes across every now and
> then. "Which model should I ask for this information"? I also think
> there's no right answer. But here's my two cents:
>
> In your case, you want to know which a product was purchased by a
> user, so the question could go both ways: Did a user purchase this
> product, or was this product purchased by the user. I think it depends
> on your views and controllers, in other words, what is the main object
> you find out the relationship about? If you're on a user view and want
> to list purchased products, you might just ask @user.orders.each { |o|
> o.products }.flatten (or some such thing). Similarly,
> @product.orders.each { |o| o.user }.flatten would give you all users
> who purchased that product. (this is all making some assumptions about
> your relationships).
>
> In either case, you are working with either an instance of User, or an
> instance of Product, so I think that that this should not be a class
> method, but an instance method.
>
> Same goes when you're already dealing with a user instance and a
> product instance and you want to find out if that relationship exists,
> which is more to the point of your original post. How about an
> instance method on the User class called has_purchased?:
>
> @user.has_purchased?(@product) => true #or false
>
>
> Here's a stab at that method...
> #class User < AR:Base
> def has_purchased?(product)
>  !self.orders.products.find_by_id(product).nil?
> end
>
> About joins, I think they are absolutely needed. Some models are more
> "self contained" than others, but since you're working with a
> relational model, it is natural that some models depend on others, and
> using :joins or :include in your finders makes life easier in many
> cases...
>
>
> On Apr 1, 5:05 am, Fernando Perez <[email protected]>
> wrote:
>> I think the problem lies in the ability for the DB to perform a join
>> across multiple tables which in fact breaks encapsulation!
>>
>> Maybe I should break down my DB query that uses joins into smaller
>> queries. The code is obviously less efficient, but it's more
>> maintainable, as each model is only concerned with its own stuff, and
>> therefore I don't have to make edits across various models just  
>> because
>> I changed the name or type of attributes in a single model.
>>
>> Using joins across multiple models doesn't feel right anymore.
>> --
>> 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