我目前正在构建一个 Rails 应用程序,其中一个User可以有很多Persons,而这些 Persons 又可以有很多Projects。
这很好用。
现在我的问题是,有些人可能属于同一个组织,而另一些人可能根本不属于任何组织。
根据我目前所了解的情况,将与组织有关的所有信息移动到单独的表/模型中会很好。(如果我错了,请纠正我。)但是如果一个人不属于任何组织,即私人,会发生什么?这一切如何在 Rails 中建模?
谢谢你的帮助。
我目前正在构建一个 Rails 应用程序,其中一个User可以有很多Persons,而这些 Persons 又可以有很多Projects。
这很好用。
现在我的问题是,有些人可能属于同一个组织,而另一些人可能根本不属于任何组织。
根据我目前所了解的情况,将与组织有关的所有信息移动到单独的表/模型中会很好。(如果我错了,请纠正我。)但是如果一个人不属于任何组织,即私人,会发生什么?这一切如何在 Rails 中建模?
谢谢你的帮助。
您的问题是不是很简单,您有可能属于或不属于某个组织的人。现在你将如何设置它?
现在,正如您所说,您将在单独的表中移动组织organizations
相关数据,例如。你的persons
(或people
?)应该包含一个organization_id
. 如果此人不属于任何组织,则它将为空。模型关系会有点像。
class Person < AR::Base
belongs_to :organization
end
class Organization < AR::Base
has_many :persons #or people?
end
我在这里跳过了与User
和Project
模型的关系。如果我错过了您问题的任何部分,请告诉我。
更新: 根据您的最后评论
让我们列出您的场景:
如果address
是唯一在个人和组织中重复的内容,那么最好将其移到单独的表格中addresses
。
组织: has_one :address
人: has_one :address
更新 2:
因为事情有点像
person.address
返回组织的地址。person.address
会返回自己的地址。那么我更喜欢以下方法来保持简单。在模型中添加current_address
(或任何首选名称)方法Person
。
def current_address
return organization.address if organization
return address
end
打电话person.current_address
而不是person.address
通过决定。
据我了解情况:
您可以通过这种方式将这种情况转换为 Rails:
class Organisation < ActiveRecord::Base
has_many :persons
end
class Person < ActiveRecord::Base
belongs_to :user
belongs_to :organisation
end
class User < ActiveRecord::Base
has_many :persons
end
试试这个可能对你有帮助
class Person < ActiveRecord::Base
belongs_to :organization
end
class Organization < ActiveRecord::Base
has_many :persons
end
如果人员属于组织,则在组织表中给出 person_id,否则如果人员不属于组织,则在组织表中 person_id 为 nil。以便
in your console
-> product = @product.organization
# if person_id given then you get result
# if person_id does not given then get null or blank