(我为在这里完全没有文盲而道歉,我希望我已经提供了足够的信息)
我正在构建与players
相关联的games
,我想知道如何在构建播放器时获得验证以适应游戏。所以我有:
class Game < ActiveRecord::Base
has_many :players, :dependent => :destroy
#does not work or is ineffective due to how I made my player's create in the controller
validates :players, :length => { :maximum => 6 }
end
class Player < ActiveRecord::Base
belongs_to :game
end
还有一个与用户的关联(玩家同时属于游戏和用户),但这与现在无关。
在我的玩家控制器中我有:
def create
@game = Game.find(params[:game_id])
@players_in_game = Array.new
@game.terra_players.each do |i|
@players_in_game.push(i.user_id)
end
@player = current_user.terra_players.build(:terra_game => @terra_game)
if @player.save
redirect_to @game
else
render 'new'
end
end
成功制造新玩家并将其添加到游戏中。
但是class Game
中的验证不起作用,大概是因为我没有为我的Game
模型调用create / update / update_attributes。
如何运行验证?我应该重新构建def create
以使用@ game.create / update / update_attribute吗?如果是这样,怎么样?
感谢您的帮助。
答案 0 :(得分:2)
不确定你究竟想要完成什么,但这里有一些想法可以引导你走上更好的道路。
您无法使用默认的rails验证来验证关联对象的最大数量。您应该能够编写自定义验证。
你使用每个和推动的逻辑看起来非常不干净,应该像
@players_in_game = @ game.terra_players.map(&amp;:user_id)