10 ruby activerecord ruby-on-rails
我正在建立一个SaaS风格的网站,其中我将有多个客户端在同一个站点上管理他们的工作流程和数据 - 因此也是同一个数据库.
我甚至不确定这个概念是否有一个词,但是有没有任何已建立的自动隔离数据的方法,以便任何ActiveRecord对数据库的调用都被登录用户的正确client_id过滤/限制?
直接的方法当然是添加一个" where client_id = ?"并将用户的客户端ID放入每个ActiveRecord请求的末尾.  
对于模型有没有任何过滤器的想法,所以任何find方法(包括动态方法)都会client_id自动粘贴到它们上面?所以我可以这样做Model.find_by_what_I_want(foo),它会自动知道将其限制为只有正确的客户端ID拥有的记录,即使我没有明确指定它?
Pra*_*ras 10
如果您使用的是Rails 2.3+,则可以使用默认范围:
class Model < ActiveRecord::Base
  default_scope :conditions => ['client_id = ?', client_id]
end
您必须确保在init进程中的某个位置设置了client_id.
这将确保该模型中的所有数据库查询都使用client_id条件.
| 归档时间: | 
 | 
| 查看次数: | 213 次 | 
| 最近记录: |