查找表的Rails关联

时间:2012-05-28 20:15:58

标签: ruby-on-rails ruby activerecord

我有一个Statuses表,其中只包含id和name字段(Active,Inactive,Pending等)。然后我有诸如用户,成就,徽章之类的表,其中每个表包含一个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之间的区别。我知道一个用户有一个公司,有一个配置文件,一个公司有很多用户,但这似乎是我的后退。

1 个答案:

答案 0 :(得分: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