2010-06-12 74 views
2

我正在實施一個簡單的RoR網頁,收集訪客的電子郵件並將它們存儲爲對象。電子郵件收集器/實施

我使用它作爲迷你項目來嘗試RoR和BDD。我能想到的功能,3黃瓜: 1.用戶提交一個有效的電子郵件地址 2.用戶提交一個現有的電子郵件地址 3.用戶提交無效的電子郵件

我的問題是,對於情景2和3,是最好通過控制器來處理這個問題?或作爲班級中的方法?也許是在實例2或3中實例化時引發錯誤的東西?

實施情況如下,除了回答上述問題外,還喜歡聽聽一些代碼評論。謝謝!


MODEL:

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

控制器:

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 

回答

1

要執行最後兩個步驟,我建議您使用導軌validations。例如,嘗試更新您的模型,看起來像這樣:

class Contact < ActiveRecord::Base 

    attr_accessor :email 

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

end 
+0

啊謝謝!這就說得通了。當我添加代碼時,出現以下錯誤: 未定義的方法'文本?' for nil:NilClass 追蹤到:/welcome_controller.rb:5:in'index' 任何線索這個錯誤是關於什麼? – Tian 2010-06-12 04:37:06

+0

不確定。 welcome_controller的第5行是什麼? – 2010-06-12 04:53:46

+0

@contact = Contact.create!(params [:contact]) – Tian 2010-06-12 06:12:31

0

在另一方面,它被認爲是不好的做法,批量賦值從「PARAMS」到模型回來。它確實允許狡猾的人有時爲你的系統做一些不幸的事情。

+0

這就是'attr_protected'和'attr_accessible'存在的原因。批量分配本身並不是不好的做法。 – x1a4 2010-06-12 03:15:23

+0

感謝您的澄清。我做了一些搜索,發現但沒有做attr_protected和使用批量分配,這將允許創建管理帳戶。什麼是可能被濫用的方式。 Seigel,您通常使用的解決方案是什麼? – Tian 2010-06-12 04:43:17

+0

剛剛在此主題上找到了一個很好的鏈接 http://b.lesseverything.com/2008/3/11/use-attr_protected-or-we-will-hack-you – Tian 2010-06-12 04:54:17