验证构建的has_many关系

时间:2011-03-23 02:00:41

标签: ruby-on-rails ruby-on-rails-3

(我为在这里完全没有文盲而道歉,我希望我已经提供了足够的信息)

我正在构建与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吗?如果是这样,怎么样?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

不确定你究竟想要完成什么,但这里有一些想法可以引导你走上更好的道路。

  1. 您无法使用默认的rails验证来验证关联对象的最大数量。您应该能够编写自定义验证。

  2. 你使用每个和推动的逻辑看起来非常不干净,应该像

    @players_in_game = @ game.terra_players.map(&amp;:user_id)