The Last Day Of Summer

.NET技术 C# ASP.net ActiveReport SICP 代码生成 报表应用 RDLC
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Ruby on rails开发从头来(windows)(十六)-登录

Posted on 2007-09-27 21:23  Cure  阅读(3942)  评论(3编辑  收藏  举报
现在我们的购物车程序为两种用户提供了服务,一类是普通用户,一类是管理员。两类用户分别有不同的功能。上次我们又实现了添加用户的功能,这次我们来实现登录的功能。

 

1.         login_controller添加login方法。

上次使用rails的命令行生成的login_controller中已经包含了login方法,下面修改该方法的内容:

def login

if request.get?

session[:user_id] = nil

@user = User.new

else

@user = User.new(params[:user])

logged_in_user = @user.try_to_login

if logged_in_user

session[:user_id] = logged_in_user.id

redirect_to(:action => "index")

else

flash[:notice] = "Invalid user/password combination"

end

end

end

2.         在上面的方法中看到调用了user.try_to_login方法,下面我们就要在user.rb文件中添加该方法:

def self.login(name, password)

hashed_password = hash_password(password || "")

find(:first,

:conditions => ["name = ? and hashed_password = ?",

name, hashed_password])

end

def try_to_login

User.login(self.name, self.password)

end

在这个方法里我们判断hash_password是不是匹配。

3.         现在我们来添加一个index页面,用在用户登录后显示订单信息。在views\login目录下,添加一个index.rhtml文件,内容如下:

<% @page_title = "Administer your Store" -%>

<h1>Depot Store Status</h1>

<p>

       Total orders in system: <%= @total_orders %>

</p>

<p>

       Orders pending shipping: <%= @pending_orders %>

</p>

4.         当然我们还要在login_controller里再添加一个actionindex,内容入下:

def index

@total_orders = Order.count

@pending_orders = Order.count_pending

end

里面又调用了Order.count Order.count_pending,就还要修改order.rb文件,内容如下:

def self.count_pending

count("shipped_at is null")

end

5.         最后我们还差一个login的页面,下面创建一个login.rhtml,放在views\login目录下,其内容为:

<%= form_tag %>

       <table>

                     <tr>

                                   <td>User name:</td>

                                   <td><%= text_field("user", "name") %></td>

                     </tr>

                     <tr>

                                   <td>Password:</td>

                                   <td><%= password_field("user", "password") %></td>

                     </tr>

                     <tr>

                                   <td></td>

                                   <td><input type="submit" value=" LOGIN " /></td>

                     </tr>

       </table>

<%= end_form_tag %>

6.         OK了,下面来看看结果,在浏览器中访问http://localhost:3003/login/login(其中的端口号根据自己的配置决定。),应该看到下面的结果:

 

输入的用户名或密码不正确的情况:

 

登录成功后: