Inherited_resources benutzerdefinierte Fehler
-
28-10-2019 - |
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?
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.