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 rails开发,经典!for rails 1.2.1
Agile Web Development with Rails 5 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书...
最新版的agile rails开发,经典!本版涵盖了Rails 2.x的内容.
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 (PDF)
Agile Web Development with Rails 3nd Edition beta
ruby rails agile 中文教程
没什么好介绍的beta版,pdf 第四版,包括Rails 3的内容。
博文链接:https://jbf034.iteye.com/blog/219935
Pragmatic - Agile Web Development with Rails 2ndPragmatic - Agile Web Development with Rails 2ndPragmatic - Agile Web Development with Rails 2ndPragmatic - Agile Web Development with Rails 2...
agile web development with rails 5(英文电子书).............................................................................................................................................................
Agile Web Development with Rails 1-14节_ppt(老师发的修正版)
Agile Web Development with Rails, 4th Edition, Rails 3.1