鉴于两种模式:
class User < ActiveRecord::Base
attr_accessible :name, :user_status
end
class UserStatus < ActiveRecord::Base
attr_accessible :descr
end
user.user_status列旨在成为一个ID,可用于加入UserStatus以获取其他信息,例如状态图标和说明。
UserStatus是一个只读参考表,它只有很少的行,都是唯一的。假设它只有四行:
{ :id => 0, :descr => 'New' },
{ :id => 1, :descr => 'Banned' },
{ :id => 2, :descr => 'Active' },
{ :id => 3, :descr => 'Unverified' }
我是否应该为参考表的ActiveRecord关联而烦恼?如果是这样,如果我想(或必须)将关联的UserStatus ID存储在用户表中,那么正确的ActiveRecord关联是什么?据我所知,基于documentation,'用户belongs_to:user_status'是我最好的选择,但在语言上这是失败;因为用户不“属于”状态,用户处于状态或具有状态。或者这对我来说太过分裂?
答案 0 :(得分:2)
belongs_to
并不总是具有语言意义,但在这种情况下,它正是你想要的。
UserStatus has_many :users
User belongs_to :user_status
这也允许状态查找处于该状态的所有用户,这可能很有用。
naughtyPeople = UserStatus.where(descr: 'Banned').users
在语言上,更重要的是您为获取此数据而采用的API。
User.find(123).user_status.descr
那种糟透了。它有你想要的关系,但API非常冗长。
class User
def status
user_status.descr
end
end
User.find(123).status
好多了。
甚至可能这个!
class User
def status
user_status.descr
end
def status=(status_string)
self.user_status = UserStatus.where(descr: status_string).first
end
end
user = User.find(123)
user.status = 'Banned'
user.user_status #=> { id: 3, descr: "Banned" }
您想要按摩它的距离取决于您。