Validation des rails depuis le contrôleur
Il y a une page de contact, qui propose de saisir le nom, téléphone, email et message, après qu'il envoie à un administrateur de messagerie. Il n'y a pas de raison de stocker le message dans la DB.
Question. Comment:
- Utiliser des Rails de validations dans le contrôleur, en n'utilisant pas le modèle, OU
- Utilisation des validations dans le modèle, mais sans aucune DB relations
UPD:
Modèle:
class ContactPageMessage
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :telephone, :email, :message
validates :name, :telephone, :email, :message, presence: true
validates :email, email_format: { :message => "Неверный формат E-mail адреса"}
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
contrôleur:
def sendmessage
cpm = ContactPageMessage.new()
if cpm.valid?
@settings = Setting.first
if !@settings
redirect_to contacts_path, :alert => "Fail"
end
if ContactPageMessage.received(params).deliver
redirect_to contacts_path, :notice => "Success"
else
redirect_to contacts_path, :alert => "Fail"
end
else
redirect_to contacts_path, :alert => "Fail"
end
end
end
source d'informationauteur Roman
Vous devez vous connecter pour publier un commentaire.
vous devez utiliser le modèle sans hériter de
ActiveRecord::Base
classe.Grâce à cela, vous serez en mesure d'initialiser un nouvel objet et de pouvoir appeler les validations sur cet objet.
Je pense que vous avez un autre nom de la classe du même nom, dans votre contrôleur de code, je peux voir ceci :
si c'est votre classe mailer changer son nom pour
ContactPageMessageMailer
. vous ne pourrez loger obtenir cette erreur.Espère que ça va aider. Grâce
Je voudrais encore vous conseillons de l'utiliser de modèle, rails de modèles ne doit pas hériter de
ActiveRecord::Base
.Par exemple:
et vous pouvez l'utiliser dans votre contrôleur avec:
Dans votre modèle, vous pouvez ajouter le ci-dessous qui va juste mettre le getter et le setter de la méthode pour le message et vous pouvez avoir la validation des messages sans avoir une colonne dans la base de données