You actually are missing something, but I should have been more clear on that part.
So, the hard point is that there is a generic list of products, shared by all users. BUT this list is only for referencing purpose, as far as a user may want a "modified" version of a product in this list. Moreover, a "modified" product is not only a product associated to a location, but it may have alternative captions as well. An example may be more explicit : Imagine you have 3 products, A, B, and C And you have 2 users : John and Sally And John have one location in his store : LocationJ And Sally have one location in her store : LocationS And John have put the product A in LocationJ And Sally have put the product B in LocationS When John wants to see the products list, he should see : Code | Caption | Location | AlternativeCaption A | The A Product | LocationJ | The Alt. A Product ==> But actually, in this table, the location is only an ID, pointing to a location in the location table B | The B Product | | C | The C Product | | And Sally should see : Code | Caption | Location | AlternativeCaption A | The A Product | | B | The B Product | LocationS | The Alt. B Product C | The C Product | | So ok, I may use your model and put the alternative captions in the Location table, but then it's not very relevant On 20 mai, 22:04, Colin Law <[email protected]> wrote: > Unless I am missing something (which is very likely) I do not see the need > for the MyProducts table. What is wrong with just > > User > has_many locations > Product > has_many locations > Location > belongs_to user > belongs_to user > > Then a user has a number of locations, each of which may have an associated > product (or not). > Each product can appear in many or no locations. > > Colin > > 2009/5/20 Jérémy <[email protected]> > > > > > Hi there, > > > I have some complex situation to solve, and can't manage to find a way > > which satisfy me ... > > > Here's the problem : > > > You have to handle many Users (id, name, email, password). > > You have a list of many Products (id, name) which are the same for all > > users. > > You have some Locations (id, user_id, name) of where to put one > > product, each user defining his own locations. > > > BUT > > > Every user should be able to put his very own "physical instance" of > > one product in a location OR NOT, which one will, consequently, be > > different for every user. Moreover, he may specify an alternative name > > for the product. > > > So you have to make some model/table that can link product, location, > > and user altogether. Let's call it MyProducts. > > > IMO there is 2 ways to go, based on the above : > > - either you put only the products that have a location in MyProducts > > - or you duplicate (badbadbad!) all the products from Products in > > MyProducts, and so for each user, which force you to maintain the same > > list in both tables, but users and products won't change too often, > > and it will require less work when you have to know which product has > > been "modified" or not. > > > My way of solving this for the moment is the first one : > > > You have one Product model, that has_many user_products > > You have one User model, that has_many user_products > > You have one Location model, that has_many user_products > > You have one MyProduct model, that belongs_to Product, belongs_to > > Location, and belongs_to User > > > This doesn't seem too bad, does it ? > > > The problem is, in your index view, when you want to list all > > Products, you have to get an array of all products, and an array of > > all my_products, and then subtract the products that exist in > > user_product from the products array, so you get only the product not > > "modified" by the user, you can display them, and you can then display > > those in user_product. But they're not ordered. So maybe there is some > > more work to do so ... > > > And this looks ugly IMO. > > > So that's why I'm asking you, how would you do something like that ? > > Is it a good idea to do as I did ? This looks like a three way > > association, and I've been taught to never do that but when you can't > > do anything else. > > > And above all, is there some Rails-way to do this ? Like using > > has_and_belongs_to_many in some cases. > > > PS : I hope my English isn't too bad, I did my best ;) --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---

