在模型中使用default_scope,按正确的instanceID进行过滤

我有两张桌子:

books(id,name,desc,instance_id)实例(id,domain)

用户应该只能在记录中查看分配给其instance_id的数据…

对于书籍,模型,要实现这一点,我正在考虑使用默认范围..类似于:

class Books  'books.created_at DESC' AND books.instance_id == current.user.instance_id end 

对这个想法的任何想法? 另外我如何为Rails 3编写第二行到最后一行? ‘AND books.instance_id == current.user.instance_id’

谢谢

访问模型中的当前用户并不是一个好主意。 我会按如下方式实现:

 class Instance < ActiveRecord::Base has_many :users has_many :books end class User < ActiveRecord::Base belongs_to :instance has_many :books, :order => "created_at DESC" has_many :instance_books, :through => :instance, :source => :books, :order => "created_at DESC" end class Book < ActiveRecord::Base belongs_to :user belongs_to :instance end 

与用户实例关联的书籍列表:

 current_user.instance_books 

用户创建的书籍列表:

 current_user.books 

创建一本新书:

 current_user.books.create(:instance => current_user.instance, ..) 

注意:

您的图书创建语法错误。 build方法将hash作为参数。 您传递的是两个参数而不是一个。

 user.books.build(params[:book].merge(:instance => current_user.instance})) 

要么

 user.books.build(params[:book].merge(:instance_id => current_user.instance_id}))