我以前使用 has_and_belongs_to_many,并已转换为 has_many :through。以下是它如何查找可以有许多用户玩的游戏列表。有了这个,我可以做 game.users 和 user.games ....:
class Game < ActiveRecord::Base
has_many :game_users, :dependent => :destroy
has_many :users, :through => :game_users, :uniq => true
end
class User < ActiveRecord::Base
has_many :game_users, :dependent => :destroy
has_many :games, :through => :game_users, :uniq => true
end
class GameUser < ActiveRecord::Base
belongs_to :game
belongs_to :user
end
我的连接表的数据库迁移:
create_table :game_users, :id => false do |t|
t.column :game_id, :integer
t.column :user_id, :integer
t.column :player_index, :integer
end
我不太确定我明白了这一切,请帮我检查一下我的事实:
依赖 => :destroy 是否正确?如果游戏或用户被破坏,我希望删除“game_users”连接表条目 - 但如果游戏被删除,我不希望用户被删除,反之亦然.....?
uniq 字段应该是说游戏只包含唯一的用户,而用户只包含唯一的游戏。那是对的吗?
和以前一样,数据库迁移具有:id => false。那仍然是正确的做法吗?我尝试在控制台中破坏游戏,并收到有关丢失 id 的投诉......所以我猜不是并试图理解原因。
我发现 Rails 活动记录关联非常混乱。我想他们不应该是!