проверка правильности отношения has_many - PullRequest
2 голосов
/ 23 марта 2011

(я прошу прощения за то, что я здесь полностью неграмотен, надеюсь, я дал достаточно информации)

Я строю 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 не работает, возможно потому, что я не вызываю create / update / update_attributes для моей Game модели.

Как мне запустить проверку? Должен ли я переделывать def create, чтобы использовать @ game.create / update / update_attribute? Если да, то как?

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 23 марта 2011

Не уверен, что именно вы пытаетесь достичь, но вот некоторые мысли, которые, мы надеемся, приведут вас к лучшему пути.

  1. Вы не можете проверить максимальное количество связанных объектов с помощью проверок рельсов по умолчанию. Вы должны быть в состоянии написать пользовательскую проверку.

  2. Ваша логика использования каждого и толчка кажется очень неприличной и, вероятно, должна выглядеть примерно так:

    @ Players_in_game = @ game.terra_players.map (&: user_id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...