《Ruby on Rails敏捷开发最佳实践-精典章节收录》PDF教程申明:本PDF教程由网站搜集整理,如需转载,请务必注明出处。
介绍:Ruby On Rails框架一经推出,立即引起B/S结构应用开发领域革命性的变化:开发者无需理会架构,只需要按Rails框架的约定向应用中填充代码,一切OK。
为了让众多Ruby On Rails学习、工作者,以及准备使用Ruby On Rails作为开发平台的开发人员能快速掌握Ruby On Rails的开发,作者精心编写了本书,书中既详细讲解了Ruby语言的基本语法,又重点介绍了Rails框架相关知识点的各种用法。
最后给出两个综合案例,作为Ruby On Rails应用开发者的参考,读者可以通过这两个案例触类旁通,解决日常开发中的问题。
读者对象本书适用于正在使用Ruby On Rails进行应用开发的开发人员、渴望了解Ruby On Rails框架的开发人员,尤其适合有初步的Java EE开发经验,想从Java EE平台过渡到Ruby On Rails开发平台的开发者。
(未完待续)第15章Rails 的邮件抽象层本章要点·电子邮件的基础知识·SMTP 协议初步·POP3协议初步·在Ruby 程序中使用SMTP 支持发送邮件·在Ruby 程序中使用POP3支持接收邮件·ActionMailer::Base 的邮件支持·在Rails 应用中发送邮件·发送HTML 格式邮件·发送带附件的邮件·电子邮件在实际应用中的用途·账户需要激活的优势·实现注册激活系统15.4注册激活系统本章将介绍一个注册激活系统,当用户输入注册信息时,必须输入有效的邮箱,当用户注册成功后,并不能立即登录系统,而要登录注册时输入的邮箱,然后通过该邮箱内的激活邮件来激活自己账户。
通过这种方式可以防止用户恶意注册,保证用户必须输入有效的邮箱地址。
15.4.1基本注册功能当用户注册一个账户时,实际上就等同于向底层数据表增加一条记录,因此本应用必须有持久层支持。
本示例应用的注册功能需要一个数据表支持,该数据表用于保存系统的所有注册账户。
下面是本应用的数据库脚本:drop database if exists regist_development;create database regist_development;use regist_development;--创建用户表create table users (id int not null auto_increment,name varchar(100)not null unique,pass varchar(100)not null,email varchar(150)not null,active_code varchar(255),is_activated boolean,primary key(id));上面创建了一个users数据表,该数据表里保存了用户名、密码、E-mail、激活码和是否激活等5个数据列。
前三个数据列的作用非常清晰,此处不再赘述。
激活码列用于保存用户刚刚注册时系统生成的注册码,这个注册码将通过邮件发送给用户,系统正是通过比较用户输入的注册码和这个注册码是否相等,从而决定是否可以激活用户。
上面的users数据表对应的持久化类是User,这个持久化类的代码非常简单,只是增加了一些Model校验功能。
下面是User类的代码:class User<ActiveRecord::Basedef validate#验证name不能为空errors.add("","用户名只能是字母、数字或下划线,且长度必须为4到20位")unless name=~/^\w{4,20}$/#验证name不能是一个数据库中已经存在的名字errors.add("","用户名不能重复,您选择的用户名已经存在")unless User.find_by_name(name).nil?#验证password不能为空errors.add("","密码只能是字母或数字,且长度必须为4到20位")unless pass=~/^[a-zA-Z0-9]{4,20}$/#验证e-mail规则errors.add("","电子邮件必须匹配电子邮件规则")unless email=~/^\w+@\w+.[a-zA-Z]{2,6}$/endend提供了上面的User Model之后,处理用户注册就非常简单了,只需要提供一个注册表单,这个表单里包含用户注册的基本信息即可。
下面是用户注册的表单页代码:<b>请输入您的注册信息</b><br><b>注意:请务必输入有效的邮箱用于接收激活邮件</b><br><%=error_messages_for:user%><%form_for:user,@user,:url=>{:action=>"pro_regist"}do|f|%>用户名:<%=f.text_field:name%><br/>密 码:<%=f.password_field:pass%><br/>Email:<%=f.text_field:email%><br/><%=submit_tag("注册")%><%end%>在浏览器中浏览该页面,看到如图15.8所示的表单页效果。
图15.8注册表单当用户单击如图15.8所示的“注册”按钮时,将会把图15.8所示的表单提交到pro_regist Action。
这个Action也非常简单,它只需调用该User类的create方法向users 数据表中增加一条记录即可。
下面是处理用户注册的Action代码:#处理用户登录def pro_regist#创建一个新的user对象@user=User.new(params[:user])#以当前时间来随机生成激活码@user.active_code=rand(Time.now.to_i).to_s#设置用户开始处于未激活状态@user.is_activated=false#如果user对象能成功地保存进数据库if@user.save thenflash[:notice]='您已经注册成功'flash[:name]=@#发送邮件ActivateMail.deliver_sent(@user)redirect_to:action=>'success'#保存失败elserender:action=>'index'endend上面的Action方法的实现与普通注册Action代码大致相似,不同的是上面的Action 代码需要调用ActivateMail.deliver_sent(@user)代码来发送邮件。
这行代码调用ActivateMail Model里的sent方法来发送激活邮件,这也就是本应用实现用户激活的重点。
15.4.2发送激活邮件本应用需要向注册用户发送激活邮件,对于Rails应用而言,激活邮件也就是一封最普通的邮件,因此我们像开发普通邮件模块一样来实现发送激活邮件。
同样,我们先使用Rails 提供的邮件代码生成器来生成一个邮件模块。
进入Rails应用的根路径下,输入如下命令:#生成ActivateMail邮件Model,并提供一个sent方法ruby script/generate mail ActivateMail sent上面的代码生成器命令会在app/models路径下生成一个activate_mail.rb文件,这个文件就是邮件发送Model,该Model里定义了一个sent方法,该方法就是发送邮件的业务逻辑方法。
修改上面的sent方法,让该sent方法实现发送激活邮件的功能。
修改后的sent 方法代码如下:#定义发送邮件的业务方法def sent(user)#指定邮件标题@subject='激活邮件'#将新注册的User实例传给邮件内容模板@body={'user'=>user}#使用用户的注册邮件作为收件人地址@recipients=user.email与前面完全类似的是,我们一样采用spring_test@作为发件人地址,这就要求我们必须在config路径下的environment.rb文件中配置sina的邮件服务器。
在environment.rb文件中增加如下代码:ActionMailer::Base.delivery_method=:smtpActionMailer::Base.server_settings={:address=>'',:port=>25,:domain=>'',:user_name=>'spring_test@',:password=>'123456',:authentication=>:login}ActionMailer::Base.default_charset='GBK'经过上面步骤,我们已经实现了发送激活邮件的大部分功能。
还有一个必须完成的地方:我们定义sent(user)方法时,该方法为@body赋值的是一个Hash对象,这意味着我们还需要为该方法指定一个邮件模板。
当我们执行ruby script/generate mail ActivateMail sent命令时,该命令还在app \views\activate_mail路径下生成了一个sent.rhtml文件,这个模板文件的响应将作为ActivateMail.sent(user)方法发送的邮件内容。
sent.rhtml模板文件的代码如下:<h4><%=@%>,您好!</h4>请在浏览器的地址栏中输入如下地址来激活您的账户:<br/><a href='http://localhost:3000/regist/pro_activate?name=<%=@%>&active_code=<%=@user.active_code%>'>http://localhost:3000/regist/pro_activate?name=<%=@%>&active_code=<%=@user.active_code%></a>上面的邮件模板是一个非常简单的页面,这个页面包含了一个简单的超级链接,这个超级链接将向服务器发送两个请求参数:用户名和验证码。