Рельсы проверки формы условного обхода - PullRequest
16 голосов
/ 08 января 2009

У меня есть модель рельсов, которая проверяет уникальность двух значений формы. Если эти 2 значения не являются уникальными, отображаются ошибки проверки, и кнопка «отправить» изменяется на «повторно отправить». Я хочу позволить пользователю нажать кнопку «повторно» и обойти проверку модели. Я хочу сделать что-то подобное из документации по проверке рельсов:

validates_uniqueness_of :value, :unless => Proc.new { |user| user.signup_step <= 2 }

но в моей модели нет значения, которое я мог бы проверить ... только те параметры, которые имеют значение "Повторная передача".

Есть идеи, как это сделать?

Ответы [ 4 ]

39 голосов
/ 08 января 2009

На мой взгляд, это лучший способ сделать это:

class FooBar < ActiveRecord::Base
  validates_uniqueness_of :foo, :bar, :unless => :force_submit
  attr_accessor :force_submit
end

тогда, на ваш взгляд, убедитесь, что вы назвали тег отправки как

<%= submit_tag 'Resubmit', :name => 'foo_bar[force_submit]' %>

Таким образом, вся логика в модели, код контроллера останется прежним.

10 голосов
/ 08 января 2009

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

Рельсы 2: Model.save(false)
Рельсы 3: Model.save(:validate => false)

Он обходит проверки (хотя все они).

2 голосов
/ 08 января 2009

Не уверен в этом, но вы можете попытаться добавить attr_accessor к вашей модели, чтобы узнать, была ли форма передана один раз или нет.

просто добавьте

attr_accessor :submitted

к вашей модели и проверьте это в ваших валидациях.

1 голос
/ 08 января 2009

Вы можете просто посмотреть на кнопку отправки, чтобы определить, хотите ли вы выполнить проверки.

def form_method
  case params[:submit]
    when "Submit" 
      'Do your validation here'
    when "Resubmit" 
      'Do not call validation routine'
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...