2012-02-05 60 views
1

所以我有一支壘球隊和球隊。我想擁有它,所以你只能添加一定數量的球員到一個球隊(最多3個)。在我的team.rb文件中,我有:模型驗證不被認可 - 最大球隊球員數

has_many :players 
validates :team, :length => {:maximum => 3} 

該應用程序沒有失敗,但它不能識別3個玩家的限制。

任何輸入將不勝感激。

+0

什麼是團隊?這是一個關聯嗎?數組?請將數據模型的內容添加到您的問題中。 – 2012-02-05 06:35:02

+0

這是一個協會是不是?我對此很新。沒有創建任何數組,我使用rails g scaffold構建了這個應用程序。因此,我只需通過輸入他們的信息添加球員:球員姓名,球衣號碼以及他們想要參加的球隊(使用collection_select)。 player.rb模型文件使用belongs_to:團隊 – DnfD 2012-02-05 06:39:31

回答

1

明白了,不知道是否有一個更容易方法來做到這一點。不得不做出一個自定義模型驗證

validate :maxplayers 

def maxplayers 
    unless team.players.count < 3 
    errors.add(:base, "You have reached team capacity") 
    end 
end 

注意這是player.rb,以及由於某種原因errors.add_to_base是行不通的。 另請注意,它是驗證,不驗證。

0

你想要做什麼(如果我做對了!)是爲了避免超過3名球員與球隊相關聯,但這不是你寫的。

長度驗證檢查一個字段長度,例如,如果你有一個名字領域的播放器模型,你可以強制最大名稱長度是這樣的:

# In the Player model 
validates :name, :length => {:maximum => 30} 

你想要做什麼是困難,你必須檢查在每個球隊的DB有最多3名球員,可能你必須使用模型掛鉤...(我也是一個新手!)

+0

那麼這只是最大的NAME長度。如果我做了上面的(我剛剛嘗試過),它會使最大長度爲30個字符。根本不擔心玩家名字的長度。我的意思是,:我猜,紅寶石長度很難纏住你的頭。我試過了:length => {:size => 3}但這不起作用。 – DnfD 2012-02-05 07:17:49

+0

我知道你並不擔心玩家的名字,它只是解釋了長度是如何驗證工作的:它指的是單個字段而不是當前關聯的數量[1]。 您在app/models/team.rb文件中編寫的代碼是否正確?你在app/models/player.rb中也有一個Player模型吧? [1]:http://guides.rubyonrails.org/active_record_validations_callbacks.html#length – 2012-02-05 07:34:23

+0

是的,有一個球員模型。 belongs_to:team :)所以我正在尋找差異驗證來使用,我會使用什麼樣的世界? – DnfD 2012-02-05 07:47:24