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

时间:2010-09-08 00:57:08

标签: ruby-on-rails ruby-on-rails-3

我有两张桌子:

书籍(id,name,desc,instance_id) 实例(id,domain)

用户应该只能在记录中看到分配给他们的instance_id的数据......

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

class Books < ActiveRecord::Base
    attr_accessible :name, :description
    belongs_to :user
    default_scope :order => 'books.created_at DESC'
        AND books.instance_id == current.user.instance_id 
end

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

由于

1 个答案:

答案 0 :(得分:0)

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

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方法将哈希作为参数。你传递的是两个参数而不是一个。

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

OR

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