私はルビーを試すサッカーゲームを作ろうとしています。団体は以下の通りです:ルビの多対多関係でロールを割り当てるベストプラクティスは何ですか?
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だということです。私はすでにクラスとオブジェクトとカプセル化と変数などを学んだが、メソッドについてのさらなるガイダンスが必要である。前もって感謝します。
タイプミスはありますか? 'self.home_user = User.find(home_user)'の代わりに 'self.home_user = User.find(home_user_id)'になるべきではありませんか?それにもかかわらず、私は構文を取得します。どうもありがとうございました。しかし最後の質問です:なぜ、作成メソッドや新しいメソッドの代わりに更新メソッドを使用しましたか?新しいメソッドと作成メソッド(とコールバック)の違いは私にとっては複雑です。 – barerd
私はhome_userとaway_userという名前の変数を持っているので、うまくいきます。それらはfindメソッドに渡されています。それらの名前を_idに変更すると、おそらくもっと意味があります。私は試合が存在するという前提で行動した。新しいものを作成しているときに同時にユーザーを選択する場合は、足場の後にデフォルトの作成アクションを使用することができます。実際には、home_user_idと:away_user_idのようにフィールド名を渡す限り、アップデートをデフォルトのままにすることもできます。私は、オブジェクト自体を割り当てる方法を示したかっただけです。 – agmcleod
この遅い応答に申し訳ありませんが、私はアップデートの内容を理解していると思うが、def_setersの中のaway_user_idを誤解していると思う。 'self.away_user_id = User.find(away_user)'の場合、相手の選択ビューの@away_user_idインスタンス変数に他のユーザーの(相手の)IDを割り当てる方法を見つける必要があります(/ new.html.erbと一致しますつまり、コントローラのアップデートや新しいメソッドを呼び出すつもりですか?しかし、マッチ/新規ビューがマッチモデルに属し、ユーザモデルに属さない場合、これはどのようになりますか? – barerd