我目前正在构建一个Rails应用程序,其中用户可以包含许多人,而这些人可以拥有多个项目。
这非常有效。
现在我的问题是某些人可能属于同一个组织,而其他人可能根本不属于任何组织。
根据我迄今所学到的知识,将与组织相关的所有信息转移到单独的表/模型中会很好。 (如果我错了,请纠正我。)但如果一个人不属于任何组织,即属于私人,会发生什么呢? 如何在Rails中建模所有这些?
感谢您的帮助。
答案 0 :(得分:4)
您的问题是否简单,您的人员可能属于或可能不属于某个组织。现在你将如何设置它?
现在正如您所说,您将把组织相关数据移到另一个表中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
来完成决策。
答案 1 :(得分:1)
据我了解情况:
您可以通过以下方式将此情况转换为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
答案 2 :(得分:0)
试试这可能对你有所帮助
class Person < ActiveRecord::Base
belongs_to :organization
end
class Organization < ActiveRecord::Base
has_many :persons
end
如果人属于组织,那么在组织表person_id中,如果其他人不属于组织,那么在组织表中person_id为零。这样
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