has_many:通过问题
-
19-09-2019 - |
题
我以前使用has_and_belongs_to_many,并已转化为has_many:通过。这里是它看起来如何一清单的游戏,可以有许多的用户播放。有了这个,我可以做游戏。用户和用户。游戏。:
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
我不是很确定我得到这一切,请帮我查一下事实:
是的依赖=>:摧毁否正确?我想的'game_users'参加表进入被删除,如果任的游戏,或用户是销毁--但我不想让用户可以删除,如果删除,并且反之亦然。。...?
该uniq场是应该说那游戏仅含有独特的用户和用户只有独特的游戏。是正确的?
该数据库迁移之前有:id=>错误的。是,仍然做的事情?我试图在控制台摧毁一个游戏,并得到了投诉有关的失踪id...所以我猜不及想明白为什么。
我找到轨道活动的记录,协会非常混乱。我猜他们不应该!
解决方案
1:是的,这是正确的
2:从 文件uniq:
如果真是重复的,将省略 从收集。有用 结合:通过。
所以,是的,如果你的目的不是得到相同的游戏的用户的游戏-收集也不相同的用户在游戏的用户收集,这是正确的。这是所有的解释 在这里,.
它不会,但是,防止重复GameUsers从被创建。对于这一点,你会需要使用 validates_的独特性_of 在GameUser模型:
class GameUser < ActiveRecord::Base
validates_uniqueness_of :game_id, :scope => :user_id
end
3:不,你不想使用:id=>假更多。通过交换从has_and_belongs_to_many到has_many:通过,你已经促进了你多加入表一个完整模型的GameUser-这就需要自己的身份证。
虽然它是旧的, 此 仍然是一个很好的文章对于理解has_many:通过。
不隶属于 StackOverflow