• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 

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.       LineItemProduct创建主从关系:

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

class LineItem < ActiveRecord::Base

belongs_to :product

end

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

 

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

上面的代码中,首先调用了Productfind方法,然后是store_controllerfind_cart方法,接下来调用Cartadd_product方法,然后在重定向页面,Actiondisplay_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

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页面,这是因为我们还没有定义session。这一步我们需要修改rails_apps\depot\app\controllers目录下的application.rb文件,使其内容为:

# Filters added to this controller apply to all controllers in the application.

# Likewise, all the methods added will be available for all controllers.

class ApplicationController < ActionController::Base

  # Pick a unique cookie name to distinguish our session data from others'

  #session:session_key => '_depot_session_id'

model :cart

model :line_item

end

l        


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Ruby中发现的一些规则发布时间:2022-07-14
下一篇:
「Ruby&amp;&amp;Sqlite3」Howtoinstallsqlite3forruby?(solve:sqlite-rubynosuchfile ...发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap