我正在实施一个简单的RoR网页,该网页收集访问者的电子邮件并将其存储为对象。
我正在使用它作为试用RoR和BDD的迷你项目。我可以想到Cucumber的3个功能: 1.用户提交有效的电子邮件地址 2.用户提交现有的电子邮件地址 3.用户提交无效的电子邮件
我的问题是,对于方案2和3,通过控制器处理这个问题会更好吗?或作为课堂上的方法?如果在sceanrio 2或3中实例化实例,可能会抛出错误?
实施如下,除了上述问题的答案之外,还喜欢听一些代码评论。谢谢!
MODEL:
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 %>
控制器:
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
答案 0 :(得分:1)
要执行最后两个步骤,我建议您使用rails validations 。例如,尝试将模型更新为如下所示:
class Contact < ActiveRecord::Base
attr_accessor :email
validates_uniqueness_of :email
validates_format_of :email, :with => /\A(\S+)@(\S+)\Z/i
end
答案 1 :(得分:0)
另一方面,将从“params”返回的值批量分配给模型被认为是不好的做法。它确实允许狡猾的人有时会对你的系统做出令人讨厌的事情。