创建关联和范围界定
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
关联,则不需要此扩展。
我读了 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
关联,则不需要此扩展。