我很难找到在 Rails 中设置模型和关系的最佳方法,因为我需要 Rails、mvc 和活动记录约定。
考虑三个表:
用户
rails generate scaffold User username:string email:string password:string
游戏
rails generate scaffold Game user_id:integer name:string description:string type:string
游戏名册
rails generate scaffold GameRoster user_id:integer game_id:integer level:integer status:string
用户可以创建游戏(这是游戏表中“所有者”的 user_id 字段)。创建者可能在也可能不在实际游戏中(game_rosters 表中创建者的可选记录)。
每个游戏都有许多不属于游戏的用户(位于 game_rosters 中)。
所以我想我应该为用户建立两种关系——has_many: games
他们创建has_many: games, through: game_rosters
的游戏,以及用户参与的游戏。
class User < ActiveRecord::Base
has_many :game_rosters
has_many :games, through: :game_rosters
has_many :games
end
class Game < ActiveRecord::Base
has_many :game_rosters
has_many :users, through: :game_rosters
end
class GameRoster < ActiveRecord::Base
belongs_to :user
belongs_to :game
end
但我不确定这是否是正确的设置,我无法让它正常工作。我有上述设置,以及以下用于尝试打印结果的设置:
<p>
<strong>My Games:</strong>
<% @user.games.each do |game| %>
<br><%= game.name %>
<% end %>
</p>
<p>
<strong>Participants:</strong>
<% @game.users do |user| %>
<br><%= game.user.name %>
<% end %>
</p>
我可以从关系中打印“我的奥运会” has_many: games
,但不能从关系中打印“参与者” has_many :through
。
任何方向将不胜感激,谢谢。