2012-02-05 69 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