在模型中使用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}))