我有点像Rails的初学者,并且不能动摇我忽略了一些愚蠢的感觉,但是这里有。我正在构建一个简单的在线游戏,允许一个用户“挑战”另一个用户,我有以下模型:
class User < ActiveRecord:Base
has_one :challenge
end
class Challenge < ActiveRecord:Base
belongs_to :user
belongs_to :target, :class_name => 'User'
end
数据库字段是您所期望的:Challenge
有user_id
和target_id
,User
有username
和一些与密码相关的字段
在空数据库中,我创建了两个用户(接收ID为1和2)和一个带有Challenge
和user_id 1
的{{1}}。从控制台,target_id 2
按预期返回用户2。 期望的是Challenge.find(1).target
不返回用户2,而是User.find(1).challenge.target
本身!
毋庸置疑,我迷失在这里。看起来这个基本应该是Just Work(tm)。有什么想法吗?
答案 0 :(得分:1)
你这里做错了。用户有一个挑战应该是:
class User < ActiveRecord:Base
has_one :challenge
end
class Challenge < ActiveRecord:Base
belongs_to :user
end
现在,挑战只是有一个user_id,你现在可以使用:
user.challenge
接受挑战。然后,你就可以为挑战者提供challenger_id。
如果您想根据challenger_id获得挑战,您只需创建一个查找器或范围,如:
Challenge.find_by_challenger_id(..)
编辑 - 我的评论中的解决方案:
嗯,我认为目标是一个 关联方法。尝试改为 像挑战者一样,我想 它会起作用。