Email Collector / Внедрение - PullRequest
       1

Email Collector / Внедрение

2 голосов
/ 12 июня 2010

Я реализую простую веб-страницу RoR, которая собирает электронные письма от посетителей и сохраняет их как объекты.

Я использую его как мини-проект, чтобы попробовать RoR и BDD. Я могу думать о 3 особенностях для огурца: 1. Пользователь отправляет действительный адрес электронной почты 2. Пользователь отправляет существующий адрес электронной почты 3. Пользователь отправляет неверный адрес электронной почты

Мой вопрос, для сценариев 2 и 3, лучше ли обрабатывать это через контроллер? или как методы в классе? Возможно, что-то, что выдает ошибки, если экземпляр создается в sceanrio 2 или 3?

Реализация ниже, люблю слышать некоторые обзоры кода в дополнение к ответам на вопросы выше. Спасибо!


Модель:

class Contact < ActiveRecord::Base
    attr_accessor :email
end

ВИД:

<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 %>

CONTROLLER:

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

Ответы [ 2 ]

1 голос
/ 12 июня 2010

Для выполнения двух последних шагов я рекомендую использовать рельсы проверки . Например, попробуйте обновить модель, чтобы она выглядела примерно так:

class Contact < ActiveRecord::Base

  attr_accessor :email

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

end
0 голосов
/ 12 июня 2010

С другой стороны, считается плохой практикой массово присваивать значения, возвращающиеся из «параметров» вашей модели.Это позволяет коварным людям иногда делать что-то неприятное с вашей системой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...