- 浏览: 7936939 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
1 每个controler都会在app\views下有一个相应的目录
2 视图中输出debug信息
<%=DEBUG params %>
<%=debug response%>
3 页面上输出
<%=session[:user_name]%>.....
4 XML模版
xml = Builder::XmlMarkup.new(:indent=>2, :margin=>4)
xml.instruct!ml, :version=>"1.0", :encoding=>"utf-8"
xml.books do
xml.book(:id=>'1') do
xml.name('xxxx')
xml.author('dsdsd')
xml.price ('68')
end
xml.book(:id=>'2') do
xml.name('ddddd')
xml.author('dsd')
xml.price ('98')
end
end
控制器中可以直接对响应设置
format.xml即可
5 image_path("logo.png"); 获得图片路径
6 加载javacript库
javascript_include_tag "prototype"
==<script type="......">
获得某个javascript路径
<%=javascript_path "xxx.js"%>
7 加入css
<%=stylesheet_link_tag "xxxx.css"/>
8 定义数字格式输出
有一系列number_with_xxxx的方法,例子
<% @books.each do |book| %>
<tr style='background:<%= cycle("#ECECEC","#FFFFFF") %>'>
<td><%=number_to_currency( book.id, :unit => "NO.", :format => "%u %
n",:precision => 0) %></td>
<td><%= book.name %></td>
<td><%= number_to_currency(book.price, :unit => "¥", :separator => ".",
:delimiter => ",") %></td>
<td><%= number_to_currency(book.count, :unit => "个", :format => "%n %u")
%></td>
<td><%= link_to '查看', book %></td>
</tr>
<% end %>
9 生成超连接,及表单助手类
link_to link_to_if,link_to_unlses,form_tag等。。。。。
10 form_for
比如控制器中
def add
@employee=Employee.new
end
表单中:
<% form_for(@employee) do |f| %>
........
这样表单提交后,直接
def create
@employee = Employee.new(params[:employee])
respond_to do |format|
if @employee.save
. ...................
11 日期和时间
下拉日期选择框
(选择日期)select_date方法:<%= select_date() %><br/>
(选择日期和时间)select_datetime方法:<%= select_datetime() %><br/>
(选择年)select_year方法:<%= select_year(Time.now,:field_name => 'birth') %
><br/>
(选择月)select_month方法:<%= select_month (Date.today) %><br/>
(选择日)select_day方法:<%= select_day(12) %><br/>
(选择时间)select_time方法:<%= select_time() %><br/>
(选择时)select_hour方法:<%= select_hour(5) %><br/>
(选择分)select_minute方法:<%= select_minute(15) %><br/>
(选择秒)select_second方法:<%= select_second(Time.now) %><br/>
12 自定义模版helper类
可以在app/helpers下创建一个包含helper类的books_helper.rb文件,封装输出的方
法
module BooksHelper
def index_helper books
html=''
......
end
然后在HTML页中调用:
<%=raw index_helper @books %>
13 cookie
cookie[:myname]="xxxx"
读取myname=cookid[:myname]
删除cookies.delete :myname
cookies[:cart]={:value=>cart,:expires=>Time.now+3600}
14 flash[:notice]="xxxxx"
跨页面传值
<%=notice%>
15 rails异步提交表单
<a href="ajax/new" data-remote="true" id="new">xxxx</xxx>
将异步提交到new这个controller去处理
form_tag标记
<% form_tag("ajax/res",:remote=>true,:id=>"f1") do%>
........
例子:一个页面中有登陆的表单,登陆后,AJAX提交,页面其他部分不变
def login
username=request["user"]["name"]
password=request["user"]["password"]
@username = username
@rule = "VIP用户"
respond_to do |format|
format.html { render :layout => false }
format.xml { renderml => @ajaxes }
end
end
登陆后的视图:
<br>
<div>您好<span><%= @username %></span>!</div>
<div>您的角色是<span><%= @rule %></span></div>
登陆的表单
<div id="login">
<% form_tag("/ajaxes/login", :remote => true, :id => "lf") do %>
<div>用户名:<%= text_field("user", "name", :class=>"input") %></div>
<div>密 码:<%= password_field("user", "password", :class=>"input") %
></div>
<div><button type="submit">登录</button></div>
<% end %>
</div>
请求的JS
$(function($) {
$('#lf').bind(
'ajax:success',
function(data, status, xhr) {
$("#login").html(status);
}).bind(
'ajax:error',
function(xhr, status, error) {
alert(error);
});
});
16 文件上传
def upload
image=params[:img]
content_size=image.size
file_data=image.read
filetype=image.content_type
@filename=image.original_filename
fileext=File.basename(@filename).split(".")[1]
@time=Time.now.to_s
timeext=File.basename(@time).split("+")[0]
newfilename=timeext+"."+fileext
File.open("#{Rails.root}/public/"+ newfilename,"wb"){
|f| f.write(file_data)
}
flash[:notice]="文件:"+ newfilename+"上传成功。"+
"上传时间是:"+(Time.now).to_s+
"上传的地址是:"+ "#{Rails.root}/public/"
render :action=>"uploadImg"
end
上传表单的设计
<% form_tag "/carts/upload",:multipart => true do %>
<%= file_field_tag(:img,:size=>"40") %>
<%= submit_tag("上传文件") %>
<% end %>
17 下载文件
send_file方式:
<%= link_to "下载文件" ,:action=> "downFile",:filename=>"#
{cart.img}.jpg" %>
downFile控制器内容:
def downFile
send_file "#{Rails.root}/public/images/"+params[:filename] unless params
[:filename].blank?
end
send_data方式:
def downSendData
io=File.open("#{Rails.root}/public/images/"+params[:filename])
io.binmode
send_data(io.read,
:filename=> params[:filename],
:type=>"image.jpg",
:disposition=>"attachment"
)
io.close
end
18 使用CKEDITOR
见 http://www.162cm.com/archives/1156.html的配置
19 使用actionmailer
1)config下的enviroment中添加代码
ActionMailer::Base.delivery_method=:smtp
ActionMailer::Base.default_charset="UTF-8"
ActionMailer::Base.smtp_settings={
:address=>"smtp.foxmail.com",
:port=>25,
:domain=>"foxmail.com",
:user_name=> "somboy",
:password=> "123456",
:authentication=> :login
}
2) views\sysemail目录下建立一个发送模版sent.html.erb
<div>
<p>注册成功,请激活后登录</p>
<p><h3><%=@user.name %>,您好!</h3></p>
<p>请在浏览器的地址栏中输入如下地址来激活您的账户</p>
<p><a href="http://localhost:3000/account/proActivate?name=<%=@user.name %
>&active_code=<%=@user.active_code %>">
http://localhost:3000/account/proActivate?name=<%=@user.name %
>&active_code=<%=@user.active_code %>
</a></p>
</div>
3) app\mailers\sysemail.rb
class Sysemail < ActionMailer::Base
default :from => "from@example.com"
# Subject can be set in your I18n file at config/locales/en.yml
# with the following lookup:
#
# en.sysemail.sent.subject
#
def sent(user,sent_at=Time.now)
subject "激活邮件,来自【dddd】"
recipients user.email
from "somboy@foxmail.com"
sent_on sent_at
body :user=>user
content_type "text/html"
end
4) 发送的逻辑,比如保存用户后发送:
def proReg
@user=User.new(params[:user])
@user.active_code=rand(Time.now.to_i).to_s
@user.is_actived=0
if @user.save then
flash[:notice]="success"
flash[:name]=@user.name
Sysemail.deliver_sent(@user)
render "Sysemail/sent"
20 页面缓存
启动缓存:
修改config/enviroments/development.rb中设置
config.action_controller.perform_caching=true
使用:
cache_page :index(设置使用缓存的页面)
清除cache
expire_page (:action=>"index")
局部缓存:
<%cache do%>
//视图中的代码
<%end%>
当失效时:
expire_fragment :action=>"show"
21 分页器
使用will_paginate库
gem 'will_paginate','3.0.pre2'
@tabflowers=Tabflower.paginate :page => params[:page], :per_page => 9
sql="select count(*) from tabflowers"
@totalTS=Tabflower.count_by_sql(sql)
totalTS=Tabflower.count_by_sql(sql)
@currentYS=params[:page]
@perPage=9
perPage=9
if totalTS % perPage!=0
totalJY=totalTS / perPage+1
else
totalJY=totalTS / perPage
end
@totalJY=totalJY
@tabuser=session[:tabuser]
respond_to do |format|
format.html # index.html.erb
format.xml { renderml => @tabflowers }
end
视图页中
<tr><td>共<%=@totalJY %>页,共<%= @totalTS %>条,每页显示<%=@perPage %>条</td><td><%=
will_paginate @tabflowers,:prev_label=> "上一页",:next_label=>:"下一页" %></td></tr>
16 全局配置信息。比如在config目录下新建site.yml配置文件:
title:xxxx
author:xxxx
在lib/enki/config.rb文件中,载入配置文件
def self.default_location
"#{Rails.root}/config/site.yml"
end
然后在app/controlers/application_controller.rb中,进行全局编码和全局变量的加载
class ApplicationController < ActionController::Base
protect_from_forgery
after_filter :set_content_type
protected
def set_content_type
headers['Content-Type'] ||= 'text/html; charset=utf-8'
end
def enki_config
@@enki_config = Enki::Config.default
end
helper_method :enki_config
end
在前端页面中调用显示这些变量的值 <%=enki_config[:title]%>
17 content_for的用法
如果我们想根据模板页面更改局部layout,使用content_for即可。
content_for允许模板页面代码放到layout中的任何位置。
比如我们的Rails程序不同的页面有不同的css样式,我们可以在layout里留出位置:
Java代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Todo List</title>
<%= stylesheet_link_tag 'application' %>
<%= yield :head %>
</head>
<body>
<div id="container">
<h1>Todo List</h1>
<%= yield %>
</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Todo List</title>
<%= stylesheet_link_tag 'application' %>
<%= yield :head %>
</head>
<body>
<div id="container">
<h1>Todo List</h1>
<%= yield %>
</div>
</body>
</html>
我们用yield :head来给模板页面某段代码留个"座位",再看页面:
Java代码
<% content_for :head do %>
<%= stylesheet_link_tag 'projects' %>
<% end %>
<h2>Projects</h2>
<ul>
<% for project in @projects %>
<li><%= project.name %></li>
<% end %>
<% content_for :head do %>
<%= stylesheet_link_tag 'projects' %>
<% end %>
<h2>Projects</h2>
<ul>
<% for project in @projects %>
<li><%= project.name %></li>
<% end %>
content_for :head里面的代码将填充layout里的yield :head。
18 render partial参数
1. 默认参数
Ruby代码
<%= render :partial => "account" %>
<%= render :partial => "account" %>
默认本地有个变量@account, 传递过去,render到的partial(_account.erb)有个变量account
2. 单独参数 locals
locals传递一组hash参数hash 值是本地的变量,hash的key是partial里的变量
Ruby代码
<%= render :partial => "account", :locals => { :account => @buyer } %>
<% for ad in @advertisements %>
<%= render :partial => "ad", :locals => { :ad => ad } %>
<% end %>
<%= render :partial => "account", :locals => { :account => @buyer } %>
<% for ad in @advertisements %>
<%= render :partial => "ad", :locals => { :ad => ad } %>
<% end %>
上面两个render分别
传递本地变量@buyer到_account.erb里叫account的参数
传递本地变量ad到_ad.erb里叫ad
3
根据1默认参数下面两个是一样的
Ruby代码
<%= render :partial => "contract", :locals => { :contract => @contract } %>
<%= render :partial => "contract" %>
<%= render :partial => "contract", :locals => { :contract => @contract } %>
<%= render :partial => "contract" %>
4. as使用
用来改变传递之后,partial里变量的名称,如下,render方式是一样的。
Ruby代码
<%= render :partial => "contract", :as => :agreement
<%= render :partial => "contract", :locals => { :agreement => @contract }
<%= render :partial => "contract", :as => :agreement
<%= render :partial => "contract", :locals => { :agreement => @contract }
传递@contract到_contract.erb里,partial里的变量名为agreement
5. object使用
object最简单,就是把一个变量原名传递到partial里,
所以什么都记不清楚的时候,就用object多写点都能表达
如下:
Ruby代码
<%= render :partial => "account",bject => @buyer %>
<% for ad in @advertisements %>
<%= render :partial => "ad",bject => ad %>
<% end %>
<%= render :partial => "account",bject => @buyer %>
<% for ad in @advertisements %>
<%= render :partial => "ad",bject => ad %>
<% end %>
传递@buyer到_account.erb的partial里变量名还是@buyer
传递ad到_ad.erb的partial里变量名还是ad
6 object和as合用
Ruby代码
<%= render :partial => "contract",bject => @contract, :as => :contract %>
<%= render :partial => "contract" %>
<%= render :partial => "contract",bject => @contract, :as => :contract %>
<%= render :partial => "contract" %>
7 collection
Ruby代码
<%= render :partial => "ad", :collection => @advertisements %>
<%= render :partial => "ad", :collection => @advertisements %>
@advertisements是一个array,partial里_ad.erb有个ad变量是@advertisements的成员。就是_ad.erb不用写loop只
是一条广告显示。
Ruby代码
<%= render :partial => "ad", :collection => @advertisements, :spacer_template => "ad_divider" %>
<%= render :partial => "ad", :collection => @advertisements, :spacer_template => "ad_divider" %>
同上,循环显示_ad.erb _ad_divider.erb 显示@advertisements.size次其中partial_ad_counter是默认计数器表示
第几条广告
8 默认
看你要partial的变量是一组记录还是一条记录,会对应约定用locals和collection
Ruby代码
#@account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account} %>
<%= render :partial => @account %>
# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>
<%= render :partial => @posts %>
#@account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account} %>
<%= render :partial => @account %>
# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>
<%= render :partial => @posts %>
这是很人性的约定,可有时候就是忘了
9 一些漂亮的简写
Ruby代码
#<%= render :partial => "account" %>可用下面代替
<%= render "account" %>
#<%= render :partial => "account", :locals => { :account => @buyer } %>可用下面代替
<%= render "account", :account => @buyer %>
# @account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account } %>可用下面代替
<%= render(@account) %>
# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>可用下面代替
<%= render(@posts) %>
#<%= render :partial => "account" %>可用下面代替
<%= render "account" %>
#<%= render :partial => "account", :locals => { :account => @buyer } %>可用下面代替
<%= render "account", :account => @buyer %>
# @account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account } %>可用下面代替
<%= render(@account) %>
# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>可用下面代替
<%= render(@posts) %>
10 layout
Ruby代码
<%# app/views/users/index.html.erb &>
Here's the administrator:
<%= render :partial => "user", :layout => "administrator", :locals => { :user => administrator } %>
Here's the editor:
<%= render :partial => "user", :layout => "editor", :locals => { :user => editor } %>
<%# app/views/users/_user.html.erb &>
Name: <%= user.name %>
<%# app/views/users/_administrator.html.erb &>
<div id="administrator">
Budget: $<%= user.budget %>
<%= yield %>
</div>
<%# app/views/users/_editor.html.erb &>
<div id="editor">
Deadline: <%= user.deadline %>
<%= yield %>
</div>
2 视图中输出debug信息
<%=DEBUG params %>
<%=debug response%>
3 页面上输出
<%=session[:user_name]%>.....
4 XML模版
xml = Builder::XmlMarkup.new(:indent=>2, :margin=>4)
xml.instruct!ml, :version=>"1.0", :encoding=>"utf-8"
xml.books do
xml.book(:id=>'1') do
xml.name('xxxx')
xml.author('dsdsd')
xml.price ('68')
end
xml.book(:id=>'2') do
xml.name('ddddd')
xml.author('dsd')
xml.price ('98')
end
end
控制器中可以直接对响应设置
format.xml即可
5 image_path("logo.png"); 获得图片路径
6 加载javacript库
javascript_include_tag "prototype"
==<script type="......">
获得某个javascript路径
<%=javascript_path "xxx.js"%>
7 加入css
<%=stylesheet_link_tag "xxxx.css"/>
8 定义数字格式输出
有一系列number_with_xxxx的方法,例子
<% @books.each do |book| %>
<tr style='background:<%= cycle("#ECECEC","#FFFFFF") %>'>
<td><%=number_to_currency( book.id, :unit => "NO.", :format => "%u %
n",:precision => 0) %></td>
<td><%= book.name %></td>
<td><%= number_to_currency(book.price, :unit => "¥", :separator => ".",
:delimiter => ",") %></td>
<td><%= number_to_currency(book.count, :unit => "个", :format => "%n %u")
%></td>
<td><%= link_to '查看', book %></td>
</tr>
<% end %>
9 生成超连接,及表单助手类
link_to link_to_if,link_to_unlses,form_tag等。。。。。
10 form_for
比如控制器中
def add
@employee=Employee.new
end
表单中:
<% form_for(@employee) do |f| %>
........
这样表单提交后,直接
def create
@employee = Employee.new(params[:employee])
respond_to do |format|
if @employee.save
. ...................
11 日期和时间
下拉日期选择框
(选择日期)select_date方法:<%= select_date() %><br/>
(选择日期和时间)select_datetime方法:<%= select_datetime() %><br/>
(选择年)select_year方法:<%= select_year(Time.now,:field_name => 'birth') %
><br/>
(选择月)select_month方法:<%= select_month (Date.today) %><br/>
(选择日)select_day方法:<%= select_day(12) %><br/>
(选择时间)select_time方法:<%= select_time() %><br/>
(选择时)select_hour方法:<%= select_hour(5) %><br/>
(选择分)select_minute方法:<%= select_minute(15) %><br/>
(选择秒)select_second方法:<%= select_second(Time.now) %><br/>
12 自定义模版helper类
可以在app/helpers下创建一个包含helper类的books_helper.rb文件,封装输出的方
法
module BooksHelper
def index_helper books
html=''
......
end
然后在HTML页中调用:
<%=raw index_helper @books %>
13 cookie
cookie[:myname]="xxxx"
读取myname=cookid[:myname]
删除cookies.delete :myname
cookies[:cart]={:value=>cart,:expires=>Time.now+3600}
14 flash[:notice]="xxxxx"
跨页面传值
<%=notice%>
15 rails异步提交表单
<a href="ajax/new" data-remote="true" id="new">xxxx</xxx>
将异步提交到new这个controller去处理
form_tag标记
<% form_tag("ajax/res",:remote=>true,:id=>"f1") do%>
........
例子:一个页面中有登陆的表单,登陆后,AJAX提交,页面其他部分不变
def login
username=request["user"]["name"]
password=request["user"]["password"]
@username = username
@rule = "VIP用户"
respond_to do |format|
format.html { render :layout => false }
format.xml { renderml => @ajaxes }
end
end
登陆后的视图:
<br>
<div>您好<span><%= @username %></span>!</div>
<div>您的角色是<span><%= @rule %></span></div>
登陆的表单
<div id="login">
<% form_tag("/ajaxes/login", :remote => true, :id => "lf") do %>
<div>用户名:<%= text_field("user", "name", :class=>"input") %></div>
<div>密 码:<%= password_field("user", "password", :class=>"input") %
></div>
<div><button type="submit">登录</button></div>
<% end %>
</div>
请求的JS
$(function($) {
$('#lf').bind(
'ajax:success',
function(data, status, xhr) {
$("#login").html(status);
}).bind(
'ajax:error',
function(xhr, status, error) {
alert(error);
});
});
16 文件上传
def upload
image=params[:img]
content_size=image.size
file_data=image.read
filetype=image.content_type
@filename=image.original_filename
fileext=File.basename(@filename).split(".")[1]
@time=Time.now.to_s
timeext=File.basename(@time).split("+")[0]
newfilename=timeext+"."+fileext
File.open("#{Rails.root}/public/"+ newfilename,"wb"){
|f| f.write(file_data)
}
flash[:notice]="文件:"+ newfilename+"上传成功。"+
"上传时间是:"+(Time.now).to_s+
"上传的地址是:"+ "#{Rails.root}/public/"
render :action=>"uploadImg"
end
上传表单的设计
<% form_tag "/carts/upload",:multipart => true do %>
<%= file_field_tag(:img,:size=>"40") %>
<%= submit_tag("上传文件") %>
<% end %>
17 下载文件
send_file方式:
<%= link_to "下载文件" ,:action=> "downFile",:filename=>"#
{cart.img}.jpg" %>
downFile控制器内容:
def downFile
send_file "#{Rails.root}/public/images/"+params[:filename] unless params
[:filename].blank?
end
send_data方式:
def downSendData
io=File.open("#{Rails.root}/public/images/"+params[:filename])
io.binmode
send_data(io.read,
:filename=> params[:filename],
:type=>"image.jpg",
:disposition=>"attachment"
)
io.close
end
18 使用CKEDITOR
见 http://www.162cm.com/archives/1156.html的配置
19 使用actionmailer
1)config下的enviroment中添加代码
ActionMailer::Base.delivery_method=:smtp
ActionMailer::Base.default_charset="UTF-8"
ActionMailer::Base.smtp_settings={
:address=>"smtp.foxmail.com",
:port=>25,
:domain=>"foxmail.com",
:user_name=> "somboy",
:password=> "123456",
:authentication=> :login
}
2) views\sysemail目录下建立一个发送模版sent.html.erb
<div>
<p>注册成功,请激活后登录</p>
<p><h3><%=@user.name %>,您好!</h3></p>
<p>请在浏览器的地址栏中输入如下地址来激活您的账户</p>
<p><a href="http://localhost:3000/account/proActivate?name=<%=@user.name %
>&active_code=<%=@user.active_code %>">
http://localhost:3000/account/proActivate?name=<%=@user.name %
>&active_code=<%=@user.active_code %>
</a></p>
</div>
3) app\mailers\sysemail.rb
class Sysemail < ActionMailer::Base
default :from => "from@example.com"
# Subject can be set in your I18n file at config/locales/en.yml
# with the following lookup:
#
# en.sysemail.sent.subject
#
def sent(user,sent_at=Time.now)
subject "激活邮件,来自【dddd】"
recipients user.email
from "somboy@foxmail.com"
sent_on sent_at
body :user=>user
content_type "text/html"
end
4) 发送的逻辑,比如保存用户后发送:
def proReg
@user=User.new(params[:user])
@user.active_code=rand(Time.now.to_i).to_s
@user.is_actived=0
if @user.save then
flash[:notice]="success"
flash[:name]=@user.name
Sysemail.deliver_sent(@user)
render "Sysemail/sent"
20 页面缓存
启动缓存:
修改config/enviroments/development.rb中设置
config.action_controller.perform_caching=true
使用:
cache_page :index(设置使用缓存的页面)
清除cache
expire_page (:action=>"index")
局部缓存:
<%cache do%>
//视图中的代码
<%end%>
当失效时:
expire_fragment :action=>"show"
21 分页器
使用will_paginate库
gem 'will_paginate','3.0.pre2'
@tabflowers=Tabflower.paginate :page => params[:page], :per_page => 9
sql="select count(*) from tabflowers"
@totalTS=Tabflower.count_by_sql(sql)
totalTS=Tabflower.count_by_sql(sql)
@currentYS=params[:page]
@perPage=9
perPage=9
if totalTS % perPage!=0
totalJY=totalTS / perPage+1
else
totalJY=totalTS / perPage
end
@totalJY=totalJY
@tabuser=session[:tabuser]
respond_to do |format|
format.html # index.html.erb
format.xml { renderml => @tabflowers }
end
视图页中
<tr><td>共<%=@totalJY %>页,共<%= @totalTS %>条,每页显示<%=@perPage %>条</td><td><%=
will_paginate @tabflowers,:prev_label=> "上一页",:next_label=>:"下一页" %></td></tr>
16 全局配置信息。比如在config目录下新建site.yml配置文件:
title:xxxx
author:xxxx
在lib/enki/config.rb文件中,载入配置文件
def self.default_location
"#{Rails.root}/config/site.yml"
end
然后在app/controlers/application_controller.rb中,进行全局编码和全局变量的加载
class ApplicationController < ActionController::Base
protect_from_forgery
after_filter :set_content_type
protected
def set_content_type
headers['Content-Type'] ||= 'text/html; charset=utf-8'
end
def enki_config
@@enki_config = Enki::Config.default
end
helper_method :enki_config
end
在前端页面中调用显示这些变量的值 <%=enki_config[:title]%>
17 content_for的用法
如果我们想根据模板页面更改局部layout,使用content_for即可。
content_for允许模板页面代码放到layout中的任何位置。
比如我们的Rails程序不同的页面有不同的css样式,我们可以在layout里留出位置:
Java代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Todo List</title>
<%= stylesheet_link_tag 'application' %>
<%= yield :head %>
</head>
<body>
<div id="container">
<h1>Todo List</h1>
<%= yield %>
</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Todo List</title>
<%= stylesheet_link_tag 'application' %>
<%= yield :head %>
</head>
<body>
<div id="container">
<h1>Todo List</h1>
<%= yield %>
</div>
</body>
</html>
我们用yield :head来给模板页面某段代码留个"座位",再看页面:
Java代码
<% content_for :head do %>
<%= stylesheet_link_tag 'projects' %>
<% end %>
<h2>Projects</h2>
<ul>
<% for project in @projects %>
<li><%= project.name %></li>
<% end %>
<% content_for :head do %>
<%= stylesheet_link_tag 'projects' %>
<% end %>
<h2>Projects</h2>
<ul>
<% for project in @projects %>
<li><%= project.name %></li>
<% end %>
content_for :head里面的代码将填充layout里的yield :head。
18 render partial参数
1. 默认参数
Ruby代码
<%= render :partial => "account" %>
<%= render :partial => "account" %>
默认本地有个变量@account, 传递过去,render到的partial(_account.erb)有个变量account
2. 单独参数 locals
locals传递一组hash参数hash 值是本地的变量,hash的key是partial里的变量
Ruby代码
<%= render :partial => "account", :locals => { :account => @buyer } %>
<% for ad in @advertisements %>
<%= render :partial => "ad", :locals => { :ad => ad } %>
<% end %>
<%= render :partial => "account", :locals => { :account => @buyer } %>
<% for ad in @advertisements %>
<%= render :partial => "ad", :locals => { :ad => ad } %>
<% end %>
上面两个render分别
传递本地变量@buyer到_account.erb里叫account的参数
传递本地变量ad到_ad.erb里叫ad
3
根据1默认参数下面两个是一样的
Ruby代码
<%= render :partial => "contract", :locals => { :contract => @contract } %>
<%= render :partial => "contract" %>
<%= render :partial => "contract", :locals => { :contract => @contract } %>
<%= render :partial => "contract" %>
4. as使用
用来改变传递之后,partial里变量的名称,如下,render方式是一样的。
Ruby代码
<%= render :partial => "contract", :as => :agreement
<%= render :partial => "contract", :locals => { :agreement => @contract }
<%= render :partial => "contract", :as => :agreement
<%= render :partial => "contract", :locals => { :agreement => @contract }
传递@contract到_contract.erb里,partial里的变量名为agreement
5. object使用
object最简单,就是把一个变量原名传递到partial里,
所以什么都记不清楚的时候,就用object多写点都能表达
如下:
Ruby代码
<%= render :partial => "account",bject => @buyer %>
<% for ad in @advertisements %>
<%= render :partial => "ad",bject => ad %>
<% end %>
<%= render :partial => "account",bject => @buyer %>
<% for ad in @advertisements %>
<%= render :partial => "ad",bject => ad %>
<% end %>
传递@buyer到_account.erb的partial里变量名还是@buyer
传递ad到_ad.erb的partial里变量名还是ad
6 object和as合用
Ruby代码
<%= render :partial => "contract",bject => @contract, :as => :contract %>
<%= render :partial => "contract" %>
<%= render :partial => "contract",bject => @contract, :as => :contract %>
<%= render :partial => "contract" %>
7 collection
Ruby代码
<%= render :partial => "ad", :collection => @advertisements %>
<%= render :partial => "ad", :collection => @advertisements %>
@advertisements是一个array,partial里_ad.erb有个ad变量是@advertisements的成员。就是_ad.erb不用写loop只
是一条广告显示。
Ruby代码
<%= render :partial => "ad", :collection => @advertisements, :spacer_template => "ad_divider" %>
<%= render :partial => "ad", :collection => @advertisements, :spacer_template => "ad_divider" %>
同上,循环显示_ad.erb _ad_divider.erb 显示@advertisements.size次其中partial_ad_counter是默认计数器表示
第几条广告
8 默认
看你要partial的变量是一组记录还是一条记录,会对应约定用locals和collection
Ruby代码
#@account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account} %>
<%= render :partial => @account %>
# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>
<%= render :partial => @posts %>
#@account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account} %>
<%= render :partial => @account %>
# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>
<%= render :partial => @posts %>
这是很人性的约定,可有时候就是忘了
9 一些漂亮的简写
Ruby代码
#<%= render :partial => "account" %>可用下面代替
<%= render "account" %>
#<%= render :partial => "account", :locals => { :account => @buyer } %>可用下面代替
<%= render "account", :account => @buyer %>
# @account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account } %>可用下面代替
<%= render(@account) %>
# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>可用下面代替
<%= render(@posts) %>
#<%= render :partial => "account" %>可用下面代替
<%= render "account" %>
#<%= render :partial => "account", :locals => { :account => @buyer } %>可用下面代替
<%= render "account", :account => @buyer %>
# @account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account } %>可用下面代替
<%= render(@account) %>
# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>可用下面代替
<%= render(@posts) %>
10 layout
Ruby代码
<%# app/views/users/index.html.erb &>
Here's the administrator:
<%= render :partial => "user", :layout => "administrator", :locals => { :user => administrator } %>
Here's the editor:
<%= render :partial => "user", :layout => "editor", :locals => { :user => editor } %>
<%# app/views/users/_user.html.erb &>
Name: <%= user.name %>
<%# app/views/users/_administrator.html.erb &>
<div id="administrator">
Budget: $<%= user.budget %>
<%= yield %>
</div>
<%# app/views/users/_editor.html.erb &>
<div id="editor">
Deadline: <%= user.deadline %>
<%= yield %>
</div>
发表评论
-
ror学习小结5
2011-11-03 18:58 10781 一对一关系,假设student和mealcard为两个一对 ... -
ror学习小结4
2011-10-31 18:01 14231 rails new 应用名称 2 启动服务器 rails ... -
ror的database.yml中注意的一点
2011-10-27 22:01 1325在database.yml中,要注意: password ... -
xp下安装ror+mysql最新心得
2011-10-27 14:44 2540话说不少前辈也说了,ROR最好在LINUX上跑,这个道理 ... -
ror学习小结2
2011-10-22 20:39 16011 定义模块 module xxx ... -
ror学习小结1
2011-10-20 21:10 1556前两天跟着书,开始自学RUBY和ROR,开始笔记之,开始感受小 ... -
grails 中配置要注意的一个地方
2008-02-24 16:12 1357之前grails运行的十分好的一个入门级应用,今天启动时,居然 ... -
卸载ruby on rails
2008-05-10 22:42 2068gem uninstall Rails gem uninsta ... -
ruby rails 笔记1
2008-05-11 12:00 1352近日开始读李刚老师的好书 ruby on rails开发实战, ...
相关推荐
这两个数据集的难度相对较大,因为类别的数量多,图像尺寸小,这使得它们成为评估深度学习模型在图像识别上的有效性的重要基准。 **ResNet和Ror模型在CIFAR数据集上的表现** 在CIFAR-10上达到89%的准确率,以及在...
**初探ROR** Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进...通过学习和实践,你将能够利用ROR构建出功能强大、易于维护的Web应用程序。
### Windows上搭建Ruby on Rails(ROR)环境详解 #### 一、引言 随着Web开发技术的不断发展,Ruby on Rails(简称Rails或ROR)作为一种高效、简洁且优雅的Web开发框架,受到了广大开发者的青睐。然而,在Windows...
总结,FreeMIS是一个运用了Ruby on Rails强大特性的管理信息系统实例,它体现了敏捷开发的理念,为开发者提供了快速构建企业级应用的平台。无论你是初学者还是经验丰富的开发者,都可以从中学习到关于Web应用开发的...
标题 "基于sqlite的ror例子" 暗示我们即将探讨的是如何在Ruby on Rails (RoR) 应用程序中使用...通过学习这个例子,开发者可以深入理解RoR如何与SQLite数据库协作,这对于初学者和有经验的开发者都是宝贵的学习资源。
总结来说,基于Ruby on Rails的在线考试系统开发是一项综合性的任务,涉及后端逻辑、数据库设计、用户交互等多个层面。通过合理利用RoR的特性,我们可以构建出功能完善、易用性强、安全性高的在线考试平台,为教育...
IRIS-RoR-Bootcamp-2020 由于大多数参与者都不熟悉Ruby,因此我们创建了一些练习来学习和练习Ruby语法-涵盖条件语句( if , else , elsif ),不同的迭代方式( each , select和map )以及面向对象的基本代码...
本报告旨在总结2006年8月底之前的Ruby on Rails(简称ROR)在中国的应用和发展现状,侧重于描述而非深度分析。报告计划随着ROR在中国的发展而不断更新,未来版本可能会引入更加科学严谨的数据收集方法,例如问卷调查...
### ARM指令集学习知识点 #### 一、ARM指令集概览 ARM(Advanced RISC Machines)指令集是一种基于精简指令集计算机(RISC)架构的指令集标准,广泛应用于移动设备、嵌入式系统等领域。本章节将详细介绍ARM指令集的...
通过深入学习汇编语言,不仅可以提升程序员对底层硬件的理解,还能帮助他们更好地掌握高级语言如C语言的工作原理。本文将通过对给定汇编代码片段的分析,来探讨几种重要的定点运算及转换技巧,并结合实例说明这些...
4. **逻辑运算指令**:如AND、OR、XOR用于逻辑操作,NOT用于取反,TEST用于测试,SHL、SAL、SHR、SAR用于位移,ROL、ROR、RCL、RCR用于循环移位。 5. **其他指令**:如CBW、CWD、CWDE、CDQ用于数据转换,它们根据...
总结来说,通过上述高级指令的详细解析,我们可以了解到NAIS PLC中文手册第三章所涵盖的高级指令在数据位操作方面的强大功能和灵活应用,以及在编程时需要注意的规则和限制。这些知识点对于PLC程序员在实际应用中...
然而,Java 的部署过程相对繁琐,不适合快速开发和小型项目,学习曲线也相对较陡峭。 .Net,尤其是从1.x到3.0的进化,逐渐增加了企业级开发的功能,如ASP.NET MVC等框架。在Web开发中,.Net 的服务器控件为开发带来...
学习RoR不仅仅是学习语言和框架本身,还包括如何利用这些强大的库来解决实际问题。 通过"myRoR"的学习,你将不仅了解到RoR的基本概念,还能深入理解Web开发流程,包括数据库设计、前后端交互、用户体验优化等。在...
在有机化学的学习中,理解并掌握试剂的性质及其在反应中的角色至关重要。本复习总结主要涉及了四个关键知识点:试剂的分类、反应类型、有机反应活性中间体以及过渡状态。 1. **试剂的分类与试剂的酸碱性** - **...
**Milog:基于Ruby on Rails的个人博客系统** Ruby on Rails(RoR)是一个流行的开源Web应用程序框架,它采用模型-...通过学习和理解这个项目,开发者不仅可以深化对RoR的理解,还能掌握构建Web应用的基本流程和技巧。
在Ruby on Rails(RoR)框架中,"RailsTutorial_FirstApp"是一个常见的起点,用于学习和实践RoR的基础知识。这个教程旨在引导开发者创建他们的第一个Web应用程序,这通常包括了解RoR的核心概念、MVC(模型-视图-控制...
**四、实验小结** - 通过这两个实验,学生能够深入理解8255芯片的基本工作原理及其在微机系统中的应用。 - 实验中遇到的问题,如软延时不够精确等问题,可以通过增加循环次数或使用硬件定时器等方式解决。 #### ...
但这并不会影响其作为学习资源的价值。 5. **持续更新**:通过参与本书的Beta测试,读者可以获得最新的更新内容,并在最终版本发布后继续接收更新。 综上所述,《Crafting Rails 4 Applications》是一本旨在帮助...