0

我目前正在构建一个 Rails 应用程序,其中一个User可以有很多Persons,而这些 Persons 又可以有很多Projects

这很好用。

现在我的问题是,有些人可能属于同一个组织,而另一些人可能根本不属于任何组织。

根据我目前所了解的情况,将与组织有关的所有信息移动到单独的表/模型中会很好。(如果我错了,请纠正我。)但是如果一个人不属于任何组织,即私人,会发生什么?这一切如何在 Rails 中建模?

谢谢你的帮助。

4

3 回答 3

4

您的问题是不是很简单,您有可能属于或不属于某个组织的人。现在你将如何设置它?

现在,正如您所说,您将在单独的表中移动组织organizations相关数据,例如。你的persons(或people?)应该包含一个organization_id. 如果此人不属于任何组织,则它将为空。模型关系会有点像。

class Person < AR::Base
    belongs_to :organization
end

class Organization < AR::Base
    has_many :persons #or people?
end

我在这里跳过了与UserProject模型的关系。如果我错过了您问题的任何部分,请告诉我。


更新: 根据您的最后评论
让我们列出您的场景:

  1. 个人和组织都可以有地址。
  2. 如果一个人不属于组织,那么这个人可能有自己的地址。
  3. 如果他属于某个组织,那么他的地址实际上就是该组织的地址。或者可能有自己的地址。

如果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通过决定。

于 2012-10-04T11:13:51.863 回答
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
于 2012-10-04T11:21:58.563 回答
0

试试这个可能对你有帮助

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
于 2012-10-04T11:21:52.837 回答