2010-06-12 5 views
2

Je suis en train de mettre en place une simple page Web RoR qui collecte les emails des visiteurs et les stocke comme des objets. Je l'utilise comme un mini-projet pour essayer RoR et BDD. Je pense à 3 caractéristiques pour le concombre: 1. L'utilisateur soumet une adresse e-mail valide 2. L'utilisateur soumet une adresse e-mail existante 3. L'utilisateur soumet un mail invalideEmail Collector/Implementation

Ma question est, pour les scénarios 2 et 3, est il vaut mieux gérer cela via le contrôleur? ou en tant que méthodes dans une classe? Peut-être quelque chose qui lance des erreurs si une instance est instanciée dans sceanrio 2 ou 3?

La mise en œuvre est ci-dessous, j'adore entendre des critiques de code en plus des réponses aux questions ci-dessus. Merci!


Modèle:

class Contact < ActiveRecord::Base 
    attr_accessor :email 
end 

VIEW:

<h1>Welcome To My Experiment</h1> 
<p>Find me in app/views/welcome/index.html.erb</p> 

<%= flash[:notice] %> 

<% form_for @contact, :url => {:action => "index"} do |f| %> 
<%= f.label :email %><br /> 
<%= f.text_field :email %> 
<%= submit_tag 'Submit' %> 
<% end %> 

CONTRÔLEUR:

class WelcomeController < ApplicationController 
    def index 
    @contact = Contact.new 
    unless params[:contact].nil? 
     @contact = Contact.create!(params[:contact]) 
     flash[:notice] = "Thank you for your interest, please check your mailbox for confirmation" 
    end 
    end 
end 

Répondre

1

Pour effectuer les deux dernières étapes, je vous recommande d'utiliser les rails validations. Par exemple, essayez de mettre à jour votre modèle pour ressembler à quelque chose comme ceci:

class Contact < ActiveRecord::Base 

    attr_accessor :email 

    validates_uniqueness_of :email 
    validates_format_of :email, :with => /\A(\S+)@(\S+)\Z/i 

end 
+0

Ah merci! Ça a du sens. Lorsque j'ajoute cependant le code, j'obtiens l'erreur suivante: méthode non définie 'text? ' for nil: NilClass Trace vers: /welcome_controller.rb:5:in 'index ' Des indices sur la nature de cette erreur? – Tian

+0

Pas certain. À quoi correspond la ligne 5 de votre welcome_controller? –

+0

@contact = Contact.create! (Params [: contact]) – Tian

0

Sur une autre note, il est considéré comme une mauvaise pratique en vrac affecter des valeurs à revenir des « params » à votre modèle. Cela permet parfois aux personnes sournoises de faire des choses peu recommandables dans votre système.

+0

C'est la raison pour laquelle 'attr_protected' et' attr_accessible' existent. L'affectation en masse elle-même n'est pas une mauvaise pratique. – x1a4

+0

Merci pour la clarification. J'ai fait un peu de recherche et j'ai trouvé cela mais sans faire d'attr_protected et en utilisant l'assignation en bloc, cela permettrait de créer des comptes admin par exemple. Quelles sont les façons dont il pourrait être abusé. Seigel, quelle est la solution que vous utilisez habituellement? – Tian

+0

Juste trouvé un bon lien sur ce sujet http://b.lesseverything.com/2008/3/11/use-attr_protected-or-we-will-hack-you – Tian