Рельсы помогают проверить номер - PullRequest
1 голос
/ 04 мая 2011

Я хочу подтвердить отправленную форму.Имя отправляемого параметра - рейтинг.И этот параметр сохраняется в столбце rating_score.

Я хочу проверить, что оценки параметров находятся только между 1 и 5.

Я поместил это в мою модель: validates_inclusion_of: rating_score,:in => 1..5

После этого я отправил свою форму с оценкой параметров = 6, и она была сохранена в моей базе данных.

Мой контроллер:

  def rate
    @konkurrancer = Konkurrancer.find(params[:id])
    @konkurrancer.rating_score ||= 0
    @container = "Konkurrancer"+@konkurrancer.id.to_s
    @konkurrancer.rating_score += params[:vind][:ratings].to_i
    @konkurrancer.ratings += 1
    @konkurrancer.save

    respond_to do |format|
      format.js
    end
  end

Моя модель:

class Konkurrancer < ActiveRecord::Base
attr_accessible :rating_score
validates_inclusion_of :rating_score, :in => 1..5
end

Мой журнал при отправке моей формы:

Started POST "/konkurrancers/rate/7" for 127.0.0.1 at 2011-05-03 23:23:53 +0200
  Processing by KonkurrancersController#rate as */*
  Parameters: {"utf8"=>"Ô£ô", "authenticity_token"=>"h6RSZbuVVfYIvdNb31xS6Oo7Q8o
1JxvVL24aoJ2GQ/o=", "vind"=>{"ratings"=>"6"}, "id"=>"7"}

Completed 200 OK in 488ms (Views: 239.0ms | ActiveRecord: 20.0ms)

Как сделать проверку?

Ответы [ 2 ]

1 голос
/ 04 мая 2011

попробуйте использовать validates_numericity_of

validates_numericality_of :ratings , :less_than_or_equal_to=>5, :greater_than_or_equal_to=>1
0 голосов
/ 04 мая 2011

Попробуйте сохранить его перед просмотром. Похоже, ваш объект не сохранен, но ваш rating_score грязный и равен 6.

  def rate
    @konkurrancer = Konkurrancer.find(params[:id])
    @konkurrancer.rating_score ||= 0
    @container = "Konkurrancer"+@konkurrancer.id.to_s
    @konkurrancer.rating_score += params[:vind][:ratings].to_i
    @konkurrancer.ratings += 1
    if @konkurrancer.save
      respond_to do |format|
        format.js
      end
    end
  end

OLD

Хорошо, вы подтверждаете rating_score, но не raitings

Так что если вы установите ratings = 6, он будет сохранен.

Но если вы установите rating_score = 6, оно не будет сохранено, потому что ваша проверка правильна.

Попробуйте это

class Konkurrancer < ActiveRecord::Base
  attr_accessible :rating_score
  validates_inclusion_of :rating_score, :in => 1..5
end

или

class Konkurrancer < ActiveRecord::Base
  attr_accessible :rating_score
  validates :rating_score, :inclusion => { :in => 1..5 }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...