次のようなスコープを使用してみることができます。
class Books < ActiveRecord::Base
# .... code ....
scope :personal, proc {|user| where(:instance_id => user.instance_id) }
# .... code ...
end
今、あなたはすることができます:
@personal_books = Books.personal(@user)
スコープの詳細については、 http ://www.railsdispatch.com/posts/rails-3-makes-life-better (少し下にスクロール)を参照してください。
別の方法は、次のような関連付けを行うことです
インスタンスを介したユーザーhas_manyBooks
次に、ユーザーをインスタンス上の本にマッピングする追加のレガシーテーブルがあります。これはn:mの関係です。したがって、本は複数のインスタンスに属する可能性があります。
次のようになります。
ユーザーテーブル:
ユーザー(名前、電子メール、パスワード、instance_idなど...)
ブックテーブル:
Books(name、desc)#これ以上instance_idはありません!
マッピングテーブル:
割り当て(instance_id、book_id)
そして、モデルは次のようになります。
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
ユーザーのインスタンスのすべての本を取得するコードは次のようになります。
@user = User.find(:first)
@books = @user.instance.books.find(:all)
( http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.htmlを読むことをお勧めします)
編集
本が常に1つのインスタンスにのみ属している場合は、これを試すことができます。
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
したがって、次のようなユーザーの本を入手します。
@user.instance.books.find(:all)