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
数据库表上检查它。
为什么它会在'Team'而不是'TeamsPlayer'一个custom validation?如果我把它放在'Team'上,我是不是可以像我想要的那样添加尽可能多的球员?我只是公开了一个用于创建'TeamsPlayer'对象的表单 – Brian
当验证像X这样的约束只能有一个Y时,我将验证放在X上,所以我将验证放在'Team'上以检查它是否只有'零或一个踢球手。我想你可以对“TeamsPlayer”进行验证,我从来没有尝试过。 –
我使用它自己的控制器创建/编辑/销毁连接模型,所以我不认为我可以将验证放在X上。我认为他们只会在我尝试修改X时运行,而我不是。 – Brian