很抱歉,如果这个标题没有意义,我是Rails的新手,我正在建立一个扑克游戏来学习框架。我有一个游戏模型......
class Game < ActiveRecord::Base
has_many :players, :dependent => :destroy
has_many :community_cards, :class_name => "Card", :dependent => :destroy
has_many :used_cards, :class_name => "Card", :dependent => :destroy
...有一些关于玩家,社区卡和used_cards的关联。但是,当我将卡片对象添加到used_cards ...
时new_card = Card.create(:suit => random_suit, :face => random_face)
used_cards << new_card
...然后,community_cards会使用相同的卡进行更新,因此used_cards和community_cards都包含相同的对象。是什么给了什么?
非常感谢您的所有智慧!
答案 0 :(得分:2)
由于Card模型存储单个game_id字段,然后该新卡被设置为游戏对象的子元素,因此两个阵列都会更新。 Rails无法知道什么是什么。但是,有一个解决方案。
如果查看api.rubyonrails.org上的has_many文档,您会看到有一个条件选项。所以我建议你做的是在卡模型中添加一个布尔字段。然后为Card模型的每个has_many声明添加一个条件,以检查布尔值。例如
rails g migration add_used_to_cards used:boolean
然后编辑生成的迁移文件,以便设置默认值。 add_column方法应如下所示:
add_column :cards, :used, :boolean, :default => false
然后改变你的has_many:
has_many :community_cards, :class_name => "Card", :dependent => :destroy, :conditions => { :used => false }
has_many :used_cards, :class_name => "Card", :dependent => :destroy, :conditions => { :used => true }
这应该可以解决问题。