3

我有一个仅包含 id 和名称字段(活动、非活动、待定等)的状态表。然后,我有诸如用户、成就、徽章之类的表,其中每个表都包含一个 status_id 外键。我的模型中的关联看起来正确吗?

class Status < ActiveRecord::Base
  has_many :achievements
  has_many :badges
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :status
end

class Badge < ActiveRecord::Base
  belongs_to :status
end

class Achievement < ActiveRecord::Base
  belongs_to :status
end

在查找表的情况下,我正在努力如何正确读取 has_one 和 has_many 之间的区别。我知道一个用户拥有一家公司并拥有一个个人资料,而一家公司有很多用户,但这对我来说似乎倒退了。

4

1 回答 1

8

最简单的关联设置是:

class User < ActiveRecord::Base
  has_one :status
end

这准确地描述了您发布的内容。您的解决方案会起作用,但对于您所描述的内容来说太过分了。我上面发布的所有关联都是向用户模型添加一种方法,即

@user = User.find(1)
@user.status

另一方面,如果您想要简单的语义来显示具有特定状态的所有用户,那么您将添加

class Status < ActiveRecord::Base
  has_many :users
end

所以现在你可以这样做:

@status = Status.find_by_description('Active').first()

@status.users

请注意,在这两种情况下,所需要的只是用户模型具有属性“status_id”

Belongs_to 更适合存在隐式层次结构,即

class Child << ActiveRecord::Base
   belongs_to :parent
end
于 2012-05-28T20:39:34.170 回答