vous pouvez essayer d'utiliser des étendues comme:
class Books < ActiveRecord::Base
# .... code ....
scope :personal, proc {|user| where(:instance_id => user.instance_id) }
# .... code ...
end
Maintenant vous pouvez faire:
@personal_books = Books.personal(@user)
vous pouvez en savoir plus sur les étendues ici: http://www.railsdispatch.com/posts/rails-3-makes-life-better (faites défiler un peu)
Une autre façon est de faire une association comme
L'utilisateur has_many Boo ks à travers l'instance
Ensuite, vous auriez un utilisateur de mappage de table hérité supplémentaire aux livres sur leur instance. C'est une relation n: m. Un livre pourrait donc appartenir à plusieurs instances.
Il ressemblerait à ceci:
Tableau utilisateur:
utilisateurs (nom, email, mot de passe, instance_id, etc ...)
Rédigée Tableau:
Livres (nom , desc) # plus d'instance_id!
Mapping Tableau:
missions (instance_id, book_id)
Et vos modèles ressemblerait à ceci:
class Assignment < ActiveRecord::Base
belongs_to :book # foreign key - book_id
belongs_to :instance # foreign key - instance_id
end
class Instance < ActiveRecord::Base
has_many :assignments
has_many :books, :through => :assignments
end
class Books < ActiveRecord::Base
has_many :assignments
has_many :users, :through => :assignments
end
class User < ActiveRecord::Base
belongs_to :instance
end
Le code pour obtenir tous les livres de l'instance d'un utilisateur ressemblerait à ceci:
@user = User.find(:first)
@books = @user.instance.books.find(:all)
(je vous recommande de lire http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html)
Modifier
Vous pouvez essayer si un livre appartient toujours à une seule instance:
class User < ActiveRecord::Base
belongs_to :instance
end
class Instance < ActiveRecord::Base
has_many :users
has_many :books
end
class Books < ActiveRecord::Base
belongs_to :instance
end
Alors vous prenez les livres d'un utilisateur comme:
@user.instance.books.find(:all)
Merci, mais Je suis curieux de savoir pourquoi utiliser une table d'affectations, qui finirait par être une grande base de données si chaque table a besoin d'une table d'affectations pour correspondre à la table d'instance. Pourquoi ne pas simplement ajouter instance_id à tous les enregistrements de la base de données? – AnApprentice
Parce que vous auriez beaucoup de doublons dans votre base de données. Un livre est un objet "unique" et peut appartenir à plusieurs instances, n'est-ce pas? Donc, vous devriez avoir une seule entrée pour le livre. Mais de nombreuses instances peuvent avoir accès à ce livre non? Vous devriez donc avoir une table supplémentaire indiquant quelles instances ont accès à certains livres. C'est ce qu'on appelle une relation many-to-many ou une relation n: m. – sled
Traîneau, un livre n'appartient qu'à 1 instance, c'est pourquoi je ne sais pas si la table d'affectation est la bonne façon de procéder. – AnApprentice