Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何针对这种特定情况实施祖先_Ruby On Rails_Ruby On Rails 4_Ancestry - Fatal编程技术网

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