我有一个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之间的区别。我知道一个用户有一个公司,有一个配置文件,一个公司有很多用户,但这似乎是我的后退。
答案 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