Frage

Ich habe ein Modell mit virtuellen Attributen zur Verwendung in simple_form:

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

Ich habe ein Formular für / 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 "Отправить"

Und ich möchte all diese virtuellen Attribute in meinem SmsesController überprüfen, indem ich eine Aktion erstelle und wenn sie ungültig ist - Fehler anzeigen.Das funktioniert aber nicht:

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

Wie soll ich meine benutzerdefinierten Fehler hinzufügen, wenn ich geerbte Ressourcen verwende?

War es hilfreich?

Lösung

Wenn es keinen bestimmten Grund gibt, warum Sie im Controller validieren, sollte sich die Validierung im Modell befinden:

 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

In der Steuerung löst ein Speichern (oder ein Aufruf von object.valid?) die Ausführung dieser Überprüfungen aus.Sie können dann die Antwort in Ihrem Controller verarbeiten, um die Aktion erneut zu rendern, wenn dies gerechtfertigt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top