【发布时间】:2023-03-12 08:15:01
【问题描述】:
我很难找到在 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
game_rosters
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 关系中打印“参与者”。
任何方向都将不胜感激,谢谢。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord