use*_*769 3 ruby activerecord ruby-on-rails
我有一个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
Run Code Online (Sandbox Code Playgroud)
我正在努力解决如何在查找表的情况下正确读取has_one和has_many之间的区别.我知道一个用户有一个公司,有一个配置文件,一个公司有很多用户,但这似乎是我的倒退.
小智 8
最简单的关联设置是:
class User < ActiveRecord::Base
has_one :status
end
Run Code Online (Sandbox Code Playgroud)
这准确地描述了您发布的内容.您的解决方案可行,但对于您所描述的内容来说,这样做太过分了.我上面发布的所有关联都是向用户模型添加一个方法,即
@user = User.find(1)
@user.status
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您想要显示具有特定状态的所有用户的简单语义,那么您需要添加
class Status < ActiveRecord::Base
has_many :users
end
Run Code Online (Sandbox Code Playgroud)
所以现在你可以这样做:
@status = Status.find_by_description('Active').first()
@status.users
Run Code Online (Sandbox Code Playgroud)
请注意,在两种情况下,所需的只是用户模型具有属性"status_id"
当存在隐式层次结构时,Belongs_to更适合,即e,
class Child << ActiveRecord::Base
belongs_to :parent
end
Run Code Online (Sandbox Code Playgroud)