Приращение кубка Rails Validate всегда увеличивается в 1 раз - PullRequest
1 голос
/ 20 декабря 2010

У меня есть игровая модель, у которой есть - много раундов, у которой есть - много выстрелов.В каждой игре каждый удар по кубку должен быть уникальным.Это достаточно просто сделать с validates_uniqueness_of: cup, используя область видимости: game_id.

Однако как мне проверить, что каждый выстрел является шагом +1 к последнему выстрелу?Я не могу позволить пользователям выбрать свой первый снимок как кубок 4. Это не имеет смысла.

Моя форма использует form_for @round, которая принимает вложенные атрибуты ровно для 6 снимков.Я реализую эту проверку?Нужно ли мне изменить мой взгляд или полностью переосмыслить это?

1 Ответ

1 голос
/ 20 декабря 2010

Поскольку вы используете Rails 3, у вас есть несколько приятных вариантов здесь.Я не уверен, что полностью понимаю вашу проблему, но я предполагаю, что вы хотите какой-то тип проверки, где оценка начинается с 1 и увеличивается каждый раз.*

И пример модели.

# Stick this in a lib file somewhere
class IncrementValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    record.errors[attribute] << "must increment score by +1 " unless value == (Shot.maximum(:score, :conditions => {:game_id => record.game_id} ).to_i + 1)
  end
end

class Shot < ActiveRecord::Base
  validates :score, :uniqueness => {:scope => :game_id}, :increment => true
end

Тестовый вывод:

$ ruby -I./test test/unit/shot_test.rb 
Loaded suite test/unit/shot_test
Started
.
Finished in 0.042116 seconds.

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