创建关联和范围

时间:2015-02-18 08:57:23

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord rails-activerecord

我读了"多租户与Rails"作者:Ryan Bigg和我正在使用Ruby on Rails创建一个多租户应用程序。

我制作了两个模型,租户和用户。 租户有很多用户,用户属于租户。

为了关联这些模型,我制作了这个文件,

active_record_extensions.rb

ActiveRecord::Base.class_eval do
  def self.scoped_to_tenant
    belongs_to :tenant
    association_name = self.to_s.downcase.pluralize
    Tenant.has_many association_name.to_sym, class_name: self.to_s
  end
end

并添加" scoped_to_tenant"到User.rb

class User < ActiveRecord::Base
  scoped_to_tenant
end

当我想获得一个租户的所有用户(id = 1)时,我可以通过这些代码获得它。

Tenant.find(1).users

问题是,我写

之间有什么区别
belongs_to :tenant

到User.rb并使用scoped_to_tenant方法?

在这两种情况下,Tenant.rb就是这个。

Tenant.rb < ActiveRecord::Base
   has_many :users
end

谢谢你的回答。 我可能会说英语错了,所以请告诉我你是否能理解。

1 个答案:

答案 0 :(得分:0)

scoped_to_tenant方法的调用会为您调用方法belongs_to,并将多个关联添加到Tenant

这与执行此操作相同:

# app/model/user.rb
class User < ActiveRecord::Base
  belongs_to :tenant
end

# app/model/tenant.rb
class Tenant < ActiveRecord::Base
  has_many :users
end

scoped_to_tenant的好处是您不关心将has_many关系添加到Tenant模型。 如果您只有一个模型与Tenant相关联,则不需要此扩展名。

相关问题