想知道我的关系,不确定这是否会导致未来的一些问题。
我与用户和租约有以下关系。
class User < ApplicationRecord
has_one :lease, foreign_key: "tenant_id"
has_many :leases, foreign_key: "landlord_id"
end
和
class Lease < ApplicationRecord
belongs_to :tenant, class_name: "User"
belongs_to :landlord, class_name: "User"
end
我正试图将与租户的关系和租约转换为有许多,但我不知道如何处理这个正确的方式。
我让这个和
一起工作class User < ApplicationRecord
has_many :leases_as_landlord, class_name: "Lease", foreign_key: "tenant_id"
has_many :leases_as_tenant, class_name: "Lease", foreign_key: "landlord_id"
end
和
class Lease < ApplicationRecord
belongs_to :tenant, class_name: "User", inverse_of: :leases_as_tenant
belongs_to :landlord, class_name: "User", inverse_of: :leases_as_landlord
end
但是我不喜欢叫User.leases_as_landlord
和User.leases_as_tenant
。我想做的就是调用User.leases
来返回User
作为房东或租户的租约。
您可以添加实例方法:
class User < ApplicationRecord
has_many :leases_as_landlord, class_name: "Lease", foreign_key: "tenant_id"
has_many :leases_as_tenant, class_name: "Lease", foreign_key: "landlord_id"
def leases
leases_as_landlord.or(leases_as_tenant)
end
end
它也会返回ActiveRecord_AssociationRelation
,你可以在它上面链接其他ActiveRecord方法。
我还建议遵循Rails惯例,以复数形式命名您的has_many
关联。
class User < ApplicationRecord
has_many :landlord_leases, class_name: 'Lease', foreign_key: :tenant_id
has_many :tenant_leases, class_name: 'Lease', foreign_key: :landlord_id
def leases
landlord_leases.or(tenant_leases)
end
end