Ruby on rails 如何针对这种特定情况实施祖先
我们有一个房地产应用程序,用户可以是租客或房东(所有者)。租房者可以搜索房主列出的特定房屋。租客还可以添加其他人(与特定租客住在一起的朋友或熟人)。在应用程序中,我们将其视为共同应用程序 型号Ruby on rails 如何针对这种特定情况实施祖先,ruby-on-rails,ruby-on-rails-4,ancestry,Ruby On Rails,Ruby On Rails 4,Ancestry,我们有一个房地产应用程序,用户可以是租客或房东(所有者)。租房者可以搜索房主列出的特定房屋。租客还可以添加其他人(与特定租客住在一起的朋友或熟人)。在应用程序中,我们将其视为共同应用程序 型号 #user.rb 类用户:承租人 结束 #共同申请人.rb 类共同应用程序“承租人” 结束 我想我把事情搞砸了。哪些数据库关系(关联)最适合我目前的情况 有人能解释一下吗?我正在考虑使用gem,但如何实现我目前的情况。我会重构你的代码,让共同申请者只不过是一个租客那是另一个租客的孩子 在您的租房模式中,
#user.rb
类用户
现在为了增加应用程序的用户数量,我们实现了一个邮件系统,它发送一封欢迎邮件(当承租人添加一个共同申请者时)以注册为用户。该共同申请者可以选择成为承租人,也可以添加许多共同申请者。这个过程再次进行,导致用户数量增加
这就像一个树状结构,现在我想建立一个完美的数据库关系(关联)来跟踪流入的用户,以及租用者/协同应用程序的用户
现在,当前的模型结构(尚未开发)如下所示
# user.rb
class User < ActiveRecord::Base
has_one :renter
has_one :owner
end
# renter.rb
class Renter < ActiveRecord::Base
belongs_to :user
has_many :coapplicants
has_many :coapp_renters,
:through => :coapplicants
has_many :inverse_coapplicants,
:class_name => "Coapplicant",
:foreign_key => "coapp_renter_id"
has_many :inverse_coapp_renters,
:through => :inverse_coapplicants,
:source => :renter
end
# coapplicant.rb
class Coapplicant < ActiveRecord::Base
belongs_to :renter
belongs_to :coapp_renter,
:class_name => "Renter"
end
#user.rb
类用户:共同申请人
有很多:反向应用程序,
:class_name=>“共同申请人”,
:foreign\u key=>“coapp\u renter\u id”
有很多:反向出租人,
:通过=>:反向应用程序,
:source=>:承租人
结束
#共同申请人.rb
类共同应用程序“承租人”
结束
我想我把事情搞砸了。哪些数据库关系(关联)最适合我目前的情况
有人能解释一下吗?我正在考虑使用gem,但如何实现我目前的情况。我会重构你的代码,让共同申请者只不过是一个租客那是另一个租客的孩子 在您的租房模式中,您必须添加“家长id”,以了解共同申请人属于谁 现在,在您的模型中,您可以执行以下操作
#renter.rb
class Renter < ActiveRecord::Base
belongs_to :user
has_many :children, :class_name => "Renter"
belongs_to :parent, :class_name => "Renter"
end
# Example calls
Renter.first.children
Renter.first.parent
#renter.rb
类租用者“租户”
属于:父级,:类名称=>“承租人”
结束
#示例调用
房客,第一,孩子们
租房者,第一,父母
我希望这能有所帮助我发现,有时候,在设计关联时,即使是角度上的一个小变化,也能让它们更自然地流动 您只关注个人实体<例如,code>User.find(1.renter)不是很直观,因为这两个模型描述的基本上是同一个人 我不会试图去模仿人们是什么,我会尝试去模仿他们拥有什么。在这种情况下,与其让
用户
拥有租客
,不如让他们拥有许多租房
:
class用户
我在这里假设您有一个模型属性
,它代表正在出租的东西-如果它不存在,请忽略它
对业主来说也是一样。用户
仅通过拥有所有权
就成为所有者:
class用户
共同申请略有不同,因为它属于租赁
:
类协同应用
属于:共同申请人,
类名:“用户”
属于:出租
结束
班级租金
有很多:co应用程序
结束
类用户
现在,您的用户可以同时成为所有者、承租人和共同申请人。这些关联可以让你捕捉到发生的一切——谁通过时间顺序签下了谁
从现在开始,你就要把你的有很多东西嵌套起来:通过关联,得到你想要的任何东西
想知道房东拥有的房产吗
拥有许多:拥有的财产,
通过所有权,
源::属性
她财产的租金
有很多:租约,
通过::拥有的物业,
资料来源:租金
租她的房子的人
有很多:租客,
通过租赁,
资料来源:出租人
co应用程序也是如此。想知道谁与用户共同申请
有很多:共同申请人,
通过::收到的合作申请,
资料来源:co_申请人
创建一个名为Relationship(或某物)的表,其中包含两个外来id,这两个id与您希望用户和承租人能够相互处理的内容有关(例如,能够相互“跟踪”=>Follower\u id和Following\u id)。在模型中定义与这些ID相关的方法,然后在视图中调用这些方法以显示关系。我也这么想,并将实施您的方法。谢谢:)我很乐意提供帮助。我喜欢您的方法。如果我当前的方法需要从
#renter.rb
class Renter < ActiveRecord::Base
belongs_to :user
has_many :children, :class_name => "Renter"
belongs_to :parent, :class_name => "Renter"
end
# Example calls
Renter.first.children
Renter.first.parent