我正在尝试建立一个足球游戏来试验红宝石。协会如下:
Match.rb
class Match < ActiveRecord::Base
belongs_to :home_user, :class_name => 'User', :foreign_key => 'home_user_id'
belongs_to :away_user, :class_name => 'User', :foreign_key => 'away_user_id'
User.rb
class User < ActiveRecord::Base
has_many :home_matches, :class_name => 'Match', :foreign_key => 'home_user_id'
has_many :away_matches, :class_name => 'Match', :foreign_key => 'away_user_id'
我的问题是我如何为匹配分配home_user和away_user?我想到了一个初始化方法,如:
def initialize(home_user, away_user)
@home_user = User.find(1)
@away_user = User.find(2)
end
但是如何让代码找到决定匹配的用户和提供匹配的用户?我想我应该在用户点击“set_match”链接并将这些user_ids发送到方法时定义它们但是如何?问题是红宝石是我学习的第一个OOL。我已经学习了类和对象以及封装和变量等。但是需要有关方法的进一步指导。提前谢谢。
答案 0 :(得分:1)
我不会使用initialize方法,因为当你的模型继承ActiveRecord :: Base时,它有一个很好的初始化方法来设置所有属性。
但是,你可以这样做。
def set_users(home_user, away_user)
if home_user && away_user
self.home_user = User.find(home_user)
self.away_user = User.find(away_user)
true
else
false
end
end
然后在您的控制器中
def update
@match = Match.find(params[:id])
if @match.set_users(params[:home_user_id], params[:away_user_id])
@match.save
else
@match.update_attributes(params[:match])
end
end
我基本上设置了它,所以匹配控制器上的更新操作将接受一个选项来更新用户关系,或者只接受更新参数的常用哈希值。