我读了"多租户与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
谢谢你的回答。 我可能会说英语错了,所以请告诉我你是否能理解。
答案 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
相关联,则不需要此扩展名。