開發環境
Ruby: Ruby1.9.1
Rails: Rails2.3.5
Mysql:Mysql5.0.9
Driver:mysql-2.8.1-x86-mingw32.gem
IDE:Rubymine2.0.1
一、建立資料表Users
利用RubyMine內建的Scaffold工具建立資料表Users,也可以手動建立
二、建立Controller和View
Ruby項目—>右鍵—>Create Model
完成後將自動產生相應的檔案
三、修改Model user.rb
利用Digest/SHA1對密碼進行加密,實現加密儲存
修改後代碼如下:
require "digest/sha1"</p><p>class User < ActiveRecord::Base<br /> attr_accessor :hashed_password,:repassword<br /> attr_accessible :username, :hashed_password, :repassword<br /> validates_uniqueness_of :username<br /> validates_presence_of :username, :hashed_password</p><p> def before_create<br /> self.password = User.hash_password(self.hashed_password)<br /> end</p><p> def after_create<br /> @hashed_password = nil<br /> end</p><p> def before_update<br /> self.password = User.hash_password(self.hashed_password)<br /> end</p><p> def after_update<br /> @hashed_password = nil<br /> end</p><p>private</p><p> def self.hash_password(hashed_password)<br /> Digest::SHA1.hexdigest(hashed_password)<br /> end</p><p>end
四、修改users_controller.rb
修改update方法,實現當進行edit操作時先判斷password與 password_confirm是否一致,
如果一致,則進行update操作,否則提示使用者password 與 password_confirm 輸入不一致
修改後代碼如下:
def update<br /> @user = User.find(params[:id])<br /> respond_to do |format|<br /> print "user: #{params[:user]}"<br /> if params[:user]["hashed_password"] == params[:user]["repassword"]<br /> if @user.update_attributes(params[:user])<br /> flash[:notice] = 'User was successfully updated.'<br /> format.html { redirect_to(@user) }<br /> format.xml { head :ok }<br /> else<br /> format.html { render :action => "edit" }<br /> format.xml { render :xml => @user.errors, :status => :unprocessable_entity }<br /> end<br /> else<br /> flash[:notice] = 'Password and Password confirm are not the same'<br /> format.html { render :action => "edit" }<br /> format.xml { render :xml => @user.errors, :status => :unprocessable_entity }<br /> end<br /> end<br /> end
五、修改users/edit.html.erb及users/show.html.erb
對password欄位的顯示做修改
edit.html.erb修改後代碼如下:
<h1>Editing user</h1></p><p><% form_for(@user) do |f| %><br /> <%= f.error_messages %></p><p> <p><br /> <%= f.label :username %><br /><br /> <%= f.text_field :username %><br /> </p><br /> <p><br /> <%= f.label :password %><br /><br /> <%= f.password_field :hashed_password %><br /> </p></p><p> <p><br /> <%= f.label :password_confirm %><br /><br /> <%= f.password_field :repassword %><br /> </p><br /> <p><br /> <%= f.submit 'Update' %><br /> </p><br /><% end %></p><p><%= link_to 'Show', @user %> |<br /><%= link_to 'Back', users_path %>
show.html.erb修改後代碼如下:
<p><br /> <b>Username:</b><br /> <%=h @user.username %><br /></p></p><p><p><br /> <b>Password:</b><br /> <%=h @user.hashed_password %><br /></p></p><p><%= link_to 'Edit', edit_user_path(@user) %> |<br /><%= link_to 'Back', users_path %>
六、修改routes.rb
添下如下映射規則
map.connect '/users',:controller=>"user",:action=>"index"
示範效果:
Create User:
Update User: