快速业务通道

Ruby on rails开发从头来(windows)(八)-使用Session创建购物车 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

Ruby on rails开发从头来(windows)(八)-使用Session创建购物车

时间:2011-12-02 博客园 Cure

在前面的内容里,我们演示了怎样构建一个商品的列表,这次,我们在前面内容的基础上,构建一个简单的购物车。

1.首先我们要来创建一个保存客户购物信息的表:

数据库脚本:

drop table if exists line_items;
create table line_items (
id int not null auto_increment,
product_id int not null,
quantity int not null default 0,
unit_price decimal(10,2) not null,
constraint fk_items_product foreign key (product_id) references products(id),
primary key (id)
);

之后在PhpMyAdmin中创建表,然后使用Rails命令行创建line_item表对应的类:

depot> ruby script/generate model LineItem

(创建的详细步骤可以参考前面的几篇随笔)

2.给LineItem和Product创建主从关系:

打开\rails_apps\depot\app\models目录下的line_item.rb文件,修改文件内容为:

class LineItem < ActiveRecord::Base
belongs_to :product
end

可以看到belongs_to :product这句给LineItem和Product创建了主从关系。

Ruby on rails开发从头来(windows)(八)-使用Session创建购物车(2)

时间:2011-12-02 博客园 Cure

3.现在,我们可以添加ruby代码了。

首先是rails_apps\depot\app\controllers目录下的store_controller.rb文件,给其中添加方法:

private
def find_cart
session[:cart] ||= Cart.new
end

实际上,在上篇随笔中,在rails_apps\depot\app\views\store目录下的index.rhtml文件中,我们可以看到这样的代码:

<%= link_to ''Add to Cart'',
{:action => ''add_to_cart'', :id => product },
:class => ''addtocart'' %>

这句代码的就是给Add to Cart链接指定它的Action,相应的,我们要在store_controller.rb中添加add_to_cart方法

def add_to_cart
product = Product.find(params[:id])
@cart = find_cart
@cart.add_product(product)
redirect_to(:action => ''display_cart'')
end

上面的代码中,首先调用了Product的find方法,然后是store_controller的find_cart方法,接下来调用Cart的add_product方法,然后在重定向页面,Action是display_cart。

好了,下面我们来编写这些方法中要用到的代码。

l 创建Cart类,我们在app/models目录下,创建cart.rb文件,代码如下:

class Cart
attr_reader :items
attr_reader :total_price
def initialize
@items = []
@total_price = 0.0
end
def add_product(product) <<
@items << LineItem.for_product(product)
@total_price += product.price
end
end

Ruby on rails开发从头来(windows)(八)-使用Session创建购物车(3)

时间:2011-12-02 博客园 Cure

l 给LineItem添加一个方法for_product,代码如下:

class LineItem < ActiveRecord::Base
belongs_to :product
def self.for_product(product) self.new
item = self.new
item.quantity = 1
item.product = product
item.unit_price = product.price
item
end
end

l 在store_controller.rb文件中添加方法display_cart,代码:

def display_cart
@cart = find_cart
@items = @cart.items
end

l 我们再来创建一个显示Cart的页面。

在rails_apps\depot\app\views\store目录下,新建,一个display_cart.rhtml文件,修改内容:

<h1>Display Cart</h1>
<p>
Your cart contains <%= @items.size %> items.</p>

l 这时候,如果我们点击Add to Cart链接的话,会出现一个error页面,这是因为我们还没有定义sessio

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号