Inherited_resources пользовательские ошибки - PullRequest
1 голос
/ 21 февраля 2012

У меня есть модель с виртуальными атрибутами, для использования в simple_form:

class Sms < ActiveRecord::Base
attr_accessor :delayed_send, :send_time_date, :send_time_time

У меня есть форма для / smses / new:

= simple_form_for([:admin, resource]) do |f|
  ...
  .clear
  .field.grid_3
    = f.input :delayed_send, :as => :boolean, :label => "Отложенная отправка на:"
  .clear
  .field.grid_3
    = f.input :send_time_date, :as => :string, :input_html => { :class => 'date_picker' }, :disabled => true, :label => "Дату:"
  .clear
  .field.grid_1
    = f.input :send_time_time, :as => :string, :disabled => true, :label => "Время:", :input_html => { :value => (Time.now + 1.minute).strftime("%H:%M") }
  .clear
  .actions.grid_3
    = f.submit "Отправить"

И я хочу проверить все эти виртуальные атрибутывнутри моего SmsesController, в действии создания, и если оно недействительно - показать ошибку.Но это не сработает:

class Admin::SmsesController < Admin::InheritedResources
def create
  @sms.errors.add(:send_time, "Incorrect") if composed_send_time_invalid?
  super
end

Как мне добавить свои собственные ошибки, если я использую наследуемые_ресурсы?

1 Ответ

1 голос
/ 22 февраля 2012

Если нет конкретной причины, по которой вы проверяете в контроллере, проверка должна быть в модели:

 class Sms < ActiveRecord::Base

  #two ways you can validate:
  #1.use a custom validation routine
  validate :my_validation

  def my_validation
    errors.add(:send_time, "Incorrect") if composed_send_time_invalid?
  end

  #OR 2. validate the attribute with the condition tested in a proc.
  validates :send_time, :message=>"Incorrect", :if=>Proc.new{|s| s.composed_send_time_invalid?} 
end

В контроллере будет сохранено (или вызов object.valid?)запустить эти проверки для запуска.Затем вы можете обработать ответ в вашем контроллере для повторного рендеринга действия, если это оправдано.

...