Si vous créez une classe pour représenter votre objet (Appelons ContactInfo
) vous pouvez définir des méthodes de cette classe, puis Utilisez-les en utilisant les aides standard du constructeur de formulaire Rails.
class ContactInfo
attr_accessor :name, :company, :email, :phone, :comments
def initialize(hsh = {})
hsh.each do |key, value|
self.send(:"#{key}=", value)
end
end
end
Et dans votre forme:
<h2>Contact Us</h2>
<% form_for(@contact_info, :url => path_for_your_controller_that_handles_this, :html => {:method => :post}) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
...
<% end %>
Jusqu'à présent, qui se soucie non? Cependant, ajoutez validatable gem, et vous avez une vraie raison pour ce faire! Vous pouvez maintenant avoir des messages de validation comme un vrai modèle.
Vérifiez ma rempli de classe ContactInfo:
class ContactInfo
include Validatable
attr_accessor :name, :company, :email, :phone, :comments
validates_presence_of :name
validates_presence_of :email
validates_presence_of :phone
def initialize(hsh = {})
hsh.each do |key, value|
self.send(:"#{key}=", value)
end
end
end
J'aime parce que vous pouvez écrire votre contrôleur beaucoup même comme un objet ActiveRecord et ne pas avoir à muss il avec beaucoup de logique lorsque vous avez besoin pour ré-afficher le formulaire. De plus, si vous utilisez Formtastic ou un autre constructeur de formulaire personnalisé, vous pouvez utiliser cet objet avec lui, en gardant facilement vos styles de formulaire existants.
J'ai aussi remarqué quelques commentaires sur le web, sous-entendant que les formes non-modèle sont une douleur pour valider, cet être cas serait-il plus facile d'utiliser un style «formulaire pour» pour un formulaire de contact? – conspirisi
Découvrez la gemme validable pour faciliter la validation des objets autres que les bases de données. http://github.com/jnunemaker/validatable –
Pour restaurer les valeurs d'entrée en cas de validation échouée: http://stackoverflow.com/questions/4129229/rails-restoring-contents-of-non-model-form-that-uses- form-tag/24974457 # 24974457 –