2013-06-03 47 views
1

委托的方法,我有以下三种模式:验证Rails中

class Team < ActiveRecord::Model 
    has_many :teams_players 
    has_many :players, :through => :teams_players 
end 

class TeamsPlayer < ActiveRecord::Model 
    belongs_to :team 
    belongs_to :player 

    delegate :position, :to => :player 
end 

class Player < ActiveRecord::Model 
    has_many :teams_players 
    has_many :teams, :through => :teams_players 

    # the database attribute 'position' exists on Player 
end 

团队可以有多个玩家,并且玩家可以属于多个团队。然而,一支球队只能有一名球员位置“踢球者”。

如何创建此独特验证?

我试过TeamsPlayer添加验证这样的:

validates :position, :uniqueness => { :scope => {:team_id} } 

但验证过程中,轨运行查询检查在TeamsPlayer数据库表中的列type。相反,我希望它能够识别它是一种委托方法,并在Player数据库表上检查它。

回答

0

这不是Player验证,它是Team

+0

为什么它会在'Team'而不是'TeamsPlayer'一个custom validation?如果我把它放在'Team'上,我是不是可以像我想要的那样添加尽可能多的球员?我只是公开了一个用于创建'TeamsPlayer'对象的表单 – Brian

+0

当验证像X这样的约束只能有一个Y时,我将验证放在X上,所以我将验证放在'Team'上以检查它是否只有'零或一个踢球手。我想你可以对“TeamsPlayer”进行验证,我从来没有尝试过。 –

+0

我使用它自己的控制器创建/编辑/销毁连接模型,所以我不认为我可以将验证放在X上。我认为他们只会在我尝试修改X时运行,而我不是。 – Brian