Hérité_resources Erreurs personnalisées
-
28-10-2019 - |
Question
J'ai un modèle avec des attributs virtuels, pour une utilisation dans Simple_Form:
class Sms < ActiveRecord::Base
attr_accessor :delayed_send, :send_time_date, :send_time_time
J'ai une forme pour / sms / nouveau:
= 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 "Отправить"
Et je veux valider tous ces attributs virtuels à l'intérieur de mon SMSESController, dans Create Action, et si cela invalide - montrez une erreur. Mais cela ne fonctionne pas:
class Admin::SmsesController < Admin::InheritedResources
def create
@sms.errors.add(:send_time, "Incorrect") if composed_send_time_invalid?
super
end
Comment dois-je ajouter mes erreurs personnalisées, si j'utilise HÉRÉRITÉ_RESOURCES?
La solution
S'il n'y a pas de raison spécifique pour laquelle vous validez dans le contrôleur, la validation doit être dans le modèle:
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
Dans le contrôleur, une sauvegarde (ou un appel à object.valid?) Déclenchera ces validations à exécuter. Vous pouvez ensuite gérer la réponse de votre contrôleur pour renvoyer l'action si justifiée.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow