`

agile rails

 
阅读更多
rest:
http://buddylindsey.com/kiss-dry-restful-crud-ruby-on-rails-links/

link_to "Goodbye", say_goodbye_path

say_googbye_path的意思是:/say/goodbye

rails请求流程:




创建一个项目:

rails new depot

rails generate scaffold Product title:string description:text image_url:string price:decimal

%{}中间可以放字符串不用写双引号。

rake db:seed

Product.delete_all
# . . .
Product.create(title: 'Programming Ruby 1.9',
  description:
    %{<p>
    Ruby is the fastest growing and most exciting dynamic language
    out there. If you need to get working programs delivered fast,
    you should add Ruby to your toolbox.
    </p>},
  image_url: 'ruby.jpg',
  price: 49.95)
# . . .


application.html.erb加载所有css文件什么的。

如果想区分body样式可以:

<body class='<%= controller.controller_name %>'>

修改index页面:

<h1>
    Listing products
</h1>
<table>
    <% @products.each do |product| %>
        <tr class="<%= cycle('list_line_odd', 'list_line_even') %>">
            <td>
                <%=image_tag(product.image_url, class: 'list_image') %>
            </td>
            <td class="list_description">
                <dl>
                    <dt>
                        <%=product.title %>
                    </dt>
                    <dd>
                        <%=truncate(strip_tags(product.description), length: 80) %>
                    </dd>
                </dl>
            </td>
            <td class="list_actions">
                <%=link_to 'Show', product %>
                    <br/>
                    <%=link_to 'Edit', edit_product_path(product) %>
                        <br/>
                        <%=link_to 'Destroy', product, confirm: 'Are you sure?', method: :delete
                        %>
            </td>
        </tr>
        <% end %>
</table>
<br />
<%=link_to 'New product', new_product_path %>


1、cycle会把css class替换成list_line_even list_line_odd 的样子

2、truncate显示前80个字符,strip_tags去除html tags

3、confirm 弹出确认框

rake db:rollback 回滚

设置git:

git config --global --add user.name = "jerry"

git config --global --add user.email = test@qq.com

git init

git add .

git commit -m "some message"

验证:

validates :title, :description, :image_url, presence: true

presence: true的意思是检查每个属性都被发送过来并且值不为空。

validates :price, numericality: {greater_than_or_equal_to: 0.01}

价格要大于等于0.01.为什么不是0,因为小数点后两位,如果输入0.001那么还是0

validates :title, uniqueness: true

名称不能重复:首先会检查table里面是不是有跟这个名称一样的字段

validates :image_url, allow_blank: true, format: {
  with: %r{\.(gif|jpg|png)$}i,
  message: 'must be a URL for GIF, JPG or PNG image.'
}

只测试是不是以jpg等后缀。


rake test 运行测试用例

root to: 'store#index', as: 'store'

as: 'store'告诉rails创建一个store_path变量。

<%= @page_title || "Pragmatic Bookshelf" %>

如果有这个参数就显示,没有的话就显示默认的。

application.css.scss 这个文件会包含所有stylesheet文件,在当前目录下或者自目录下。这个是由require_tree完成的。

helper:

<span class="price"><%= sprintf("$%0.02f", product.price) %></span>

下面使用内建的一个helper:number_to_currency

<span class="price"><%= number_to_currency(product.price) %></span>

rails使用session像hash,我们使用cart_id来索引cart

class ApplicationController < ActionController::Base
protect_from_forgery
 
  private
  
  def current_cart
    Cart.find(session[:cart_id])
    rescue ActiveRecord::RecordNotFound
    cart = Cart.create
    session[:cart_id] = cart.id
    cart
 end
end


Cart and line_items
class Cart < ActiveRecord::Base
  has_many :line_items, dependent: :destroy
end


destroy的意思就是当cart被删除的时候,line_items就没了

class Product < ActiveRecord::Base
  has_many :line_items
  before_destroy :ensure_not_referenced_by_any_line_item
#...
  private
  # ensure that there are no line items referencing this product
    def ensure_not_referenced_by_any_line_item
     if line_items.empty?
       return true
     else
       errors.add(:base, 'Line Items present')
       return false
     end
   end
end


当删除product的时候查看一下还有没有item里面指向他

<%= button_to 'Add to Cart', line_items_path(product_id: product) %>

这个意思是 这个product的product_id

form 应该是一个post请求,并且传递product_id: product参数

@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.line_items.build(product: product)

respond_to do |format|
  if @line_item.save
    format.html { redirect_to @line_item.cart,
    notice: 'Line item was successfully created.' }
    format.json { render json: @line_item,
    status: :created, location: @line_item }
  else
    format.html { render action: "new" }
    format.json { render json: @line_item.errors,
    status: :unprocessable_entity }
  end
end


@line_item = @cart.line_items.build(product: product)这段代码起到的作用是:

他会创建一个新的item将cart和product关联起来,你可以从任何一面创建连接。rails将会帮助你在两边建立起连接。


我们想跳转到cart界面而不是回到item界面,由于item可以找到cart,所以我们只需要把cart传递给方法即可。

在item里面添加货物数量的字段:

depot> rails generate migration add_quantity_to_line_items quantity:integer

rails可以匹配:add_XXX_to_TABLE and remove_XXX_from_TABLE

add_column :line_items, :quantity, :integer, default: 1

add product 代码:

def add_product(product_id)
current_item = line_items.find_by_product_id(product_id)
if current_item
  current_item.quantity += 1
else
  current_item = line_items.build(product_id: product_id)
end
current_item
end


删除:

➤ <%= button_to 'Empty cart', @cart, method: :delete,
➤ confirm: 'Are you sure?' %>

def destroy
    @cart = current_cart
    @cart.destroy
    session[:cart_id] = nil
    respond_to do |format|
      format.html { redirect_to store_url,
      notice: 'Your cart is currently empty' }
      format.json { head :no_content }
    end
end


product_url product_path path:product/1 url:http....product/1

<%= render(@cart.line_items) %>

render里面没写字符串怎么找partial?

默认去找当前目录下的_table 这里就是_line)item.html.erb

render path ??


➤ <%= button_to 'Add to Cart', line_items_path(product_id: product),
➤ remote: true %>

加一个remote: true就可以把这个变成一个ajax请求

告诉请求返回一个js:

respond_to do |format|
  if @line_item.save
    format.html { redirect_to store_url }
      format.js
      format.json { render json: @line_item,
        status: :created, location: @line_item }
  else
     format.html { render action: "new" }
       format.json { render json: @line_item.errors,
         status: :unprocessable_entity }
   end
end


创建一个line_item/create.js.erb

$('#cart').html("<%=j render @cart %>");


➤ $('#current_item').css({'background-color':'#88ff88'}).
➤ animate({'background-color':'#114411'}, 1000);
  • 大小: 25.6 KB
分享到:
评论

相关推荐

    Agile+Web+Development+with+Rails中文版.pdf

    《Agile Web Development with Rails》是一本经典的Rails开发指南,中文版的出版使得更多的中国开发者能够深入理解并应用敏捷开发方法与Ruby on Rails框架。这本书是Rails开发者的必备参考资料,它详细介绍了如何...

    Agile Web Development with Rails 4

    Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details., Tens of thousands of ...

    Agile Web Development with Rails

    《Agile Web Development with Rails》(敏捷Web开发:Ruby on Rails)这本书,作为Rails开发新手的教材,强调了敏捷开发方法,并以其帮助开发者建立起一个实用的Web应用。从给出的文件信息来看,这本书正在编写过程...

    Agile Web Development with Rails,Fourth Edition 第四版

    《敏捷Web开发与Rails》第四版是一本专为软件开发者设计的权威指南,全面涵盖了使用Ruby on Rails框架进行敏捷Web应用开发的知识。Rails 3是该版本的重点,它引入了许多新特性和改进,使得开发过程更为高效且灵活。...

    Agile Web Development with Rails (PDF)

    《敏捷Web开发与Rails》是一本深度探讨如何利用Ruby on Rails框架进行敏捷Web开发的指导书籍,由Dave Thomas、David Heinemeier Hansson等多位在Rails社区有着深厚贡献的作者共同编写。本书不仅覆盖了Rails的基本...

    Agile Web Development with Rails 3nd Edition Beta.pdf

    ### 敏捷Web开发与Rails 3:关键知识点解析 #### 一、Rails版本与兼容性 本书《敏捷Web开发与Rails》第三版是基于Rails 2编写的。截至本书印刷时,当前可用的Rails Gem版本为2.1。书中所包含的所有代码均已在该...

    Agile Web Development With Ruby On Rails第一及第二版

    《Agile Web Development With Ruby On Rails》是两本广受欢迎的书籍,主要涵盖了使用Ruby on Rails框架进行敏捷Web开发的知识。这本书的第1版和第2版分别详细讲解了如何运用敏捷开发方法来构建高效、可扩展且易于...

    Agile Web Development with Rails 4th edition(敏捷Web开发与Rails:程序指南 第四版)

    《敏捷Web开发与Rails:程序指南 第四版》是一本深度探讨使用Ruby on Rails框架进行敏捷Web应用开发的专业书籍。本书旨在帮助开发者充分利用Rails 4的特性,提高开发效率,实现快速迭代和高质量的代码编写。 Rails是...

    Agile Web Development With Rails 3rdEdition

    ### 敏捷Web开发与Rails 3rd Edition #### 关于Rails版本的重要信息 本书针对Rails 2进行了编写。在本书出版之际,当前普遍可用的Gem版本为Rails 2.1。书中所有代码均经过该版本测试。本书起源于与第二版相同的...

    Agile Web Development with Rails 翻译

    《敏捷Web开发与Rails》一书深入探讨了Ruby on Rails框架如何革新了Web应用程序的开发方式,强调了其敏捷性、高效性和灵活性。以下是对该书核心知识点的详细解析: ### 1. Ruby on Rails框架简介 Ruby on Rails...

    agile web development with rails 5(英文电子书)

    agile web development with rails 5(英文电子书).............................................................................................................................................................

    Agile Web Development with Rails 1-14节_ppt(老师发的修正版)

    Agile Web Development with Rails 1-14节_ppt(老师发的修正版)

    Agile Web Development with Rails for Rails 3.2

    ### Agile Web Development with Rails for Rails 3.2 #### 核心知识点概览 - **Rails 3.2概述** - **敏捷开发方法论** - **Model-View-Controller (MVC) 模式** - **Ruby on Rails基础与高级特性** - **面向对象...

Global site tag (gtag.js) - Google Analytics