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

Ruby on rails开发从头来(windows)(十一)-订单(Order)

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

在上次的内容里,我们实现了清空购物车和金额的格式化处理。这次实现订单的模块。

 

1.         首先,我们要在数据库里创建Order表,创建表的Sql如下:

create table orders (

id int not null auto_increment,

name varchar(100) not null,

email varchar(255) not null,

address text not null,

pay_type char(10) not null,

primary key (id)

);

    我们还要重新创建line_item表,下面是Sql

create table line_items (

id int not null auto_increment,

product_id int not null,

order_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),

constraint fk_items_order foreign key (order_id) references orders(id),

primary key (id)

);

InstantRail里,可以使用phpMyAdmin来执行Sql

运行命令行,生成OrderModel,如图:

 

1.       下面要修改rails_apps\depot\app\models目录下的order.rbline_item.rb文件:

class Order < ActiveRecord::Base

has_many :line_items

PAYMENT_TYPES = [

[ "Check", "check" ],

[ "Credit Card", "cc" ],

[ "Purchase Order", "po" ]

].freeze

end

class LineItem < ActiveRecord::Base

belongs_to :product

belongs_to :order

def self.for_product(product) self.new

  item = self.new

  item.quantity = 1

  item.product = product

  item.unit_price = product.price

  item

end

end

可以看出,上面的修改其实就是给OrderLineItem之间添加了主从关系。

2.       store_controller添加代码:

def checkout

@cart = find_cart

@items = @cart.items

if @items.empty?

redirect_to_index("There's nothing in your cart!")

else

@order = Order.new

end

end

3.       现在ModelController都有了,下面要作什么已经很明显了,当然是添加一个View了,在rails_apps\depot\app\views\store目录下创建checkout.rhtml文件,内容为:

<% @page_title = "Checkout" -%>

<%= start_form_tag(:action => "save_order") %>

    <table>

            <tr>

            <td>Name:</td>

            <td><%= text_field("order", "name", "size" => 40 ) %></td>

            </tr>

            <tr>

                    <td>EMail:</td>

                    <td><%= text_field("order", "email", "size" => 40 ) %></td>

            </tr>

            <tr valign="top">

                    <td>Address:</td>

                    <td><%= text_area("order", "address", "cols" => 40, "rows" => 5) %></td>

            </tr>

            <tr>

                    <td>Pay using:</td>

                    <td><%=

                            options = [["Select a payment option", ""]] + Order::PAYMENT_TYPES

                            select("order", "pay_type", options)

                    %></td>

            </tr>

            <tr>

                    <td></td>

                    <td><%= submit_tag(" CHECKOUT ") %></td>

            </tr>

    </table>

<%= end_form_tag %>

4.       这时候,如果打开Checkout页面的话,会显示错误页面,少了什么呢?我们还需要在order.rb文件中添加代码:

PAYMENT_TYPES = [

  [ "Check", "check" ],

  [ "Credit Card", "cc" ],

  [ "Purchase Order", "po" ]

  ].freeze

好了,大功告成,来看看效果吧,如图:

 

 

现在点击CHECKOUT按钮,会转到Rails的一个错误页面,提示“Unknown action”。下次我们实现这个功能。


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
ruby -- 基础学习(五)empty、nil、blank三者之间的区别发布时间:2022-07-14
下一篇:
ruby学习总结03发布时间: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