1

對不起,如果這個標題沒有意義,我是Rails的新手,我正在構建一個撲克遊戲來學習框架。我有一個遊戲模型...Rails 3.1:當我只更新一個變量時,爲什麼兩個變量都會更新

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 

...有幾個關聯的玩家,community_cards和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

也從控制器放置您的'更新操作'代碼。 – uday 2012-02-28 04:30:05

回答

2

由於卡模型存儲單個game_id字段,並且新卡被設置爲遊戲對象的子元素,所以兩個數組都會更新。 Rails無法知道是什麼。但是,有一個解決方案。

如果您查看api.rubyonrails.org上的has_many文檔,您會看到有一個條件選項。所以我建議你做的是在卡片模型中添加一個布爾字段。然後爲卡模型的每個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 } 

這應該做的伎倆。

+0

工作很好,再次感謝! – BeachRunnerFred 2012-02-28 04:54:44