创建关联和范围界定

creating an association and scoping

我读了 Ryan Bigg 的 "Multitenancy with Rails",我正在 Rails 上使用 Ruby 创建一个多租户应用程序。

我做了两个模型,Tenant 和 User。 租户有多个用户,用户属于租户。

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

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

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

Tenant.find(1).users

问题是,我写的有什么区别

belongs_to :tenant

到User.rb并使用scoped_to_tenant方法?

在这两种情况下,Tenant.rb 都是这样。

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

感谢您的回答。 我的英文可能有误,所以如果你不明白的地方请告诉我。

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 关联,则不需要此扩展。