RailsCasts 视频笔记

观看http://www.railscasts.com/中的视频时记得笔记,只有我自己才能看的懂 :D
1
[code]class ProjectsController < ApplicationController
def show
@project = Project.find(param[:id])
@tasks = Task.find(:all,:conditions=>['project_id=? and complete=?',@project.id,false])
@tasks = @project.task.find(:all,:conditons => ['complete = ?',false])
@tasks = @project.tasks.find_all_by_complete(false)
end
end[/code]


2
layout 查找模板的顺序为先在与Controller名字相同的模板,如果没有找到,就找application.rhtml模板。

layout可以指向一个方法。这样就可以根据条件来选择模板。
如:
[code] layout :user_layout
....
privated

def user_layout
if true
"admin"
else
"application"
end
end[/code]

还可以为action指定特定的layout。
如:
[code] def index
@project = Project.find(:all)
render :layout => 'admin'
#render :layout => false 不指定模板
end[/code]

3
filter_parameter_logging "password"
这样就过滤了password的值,是它不在日志中显示。保护密码


4
[code]Task.sum(:priority)
=>SELECT sum(priority) AS sum_priority FROM tasks

Task.sum(:priority,:conditions => 'complete=0')
=>SELECT sum(priority) AS sum_priority FROM tasks WHERE (complete=0)

Task.maximum(:priority)
=>SELECT max(priority) AS max_priority FROM tasks

Task.minimum(:priority)
=>SELECT min(:priority) AS min_priority FROM tasks

p=Project.find(:first)
=>SELECT * FROM projects LIMIT 1

p.tasks.sum(:priority)
=>SELECT sum(priority) AS sum_priority FROM tasks WHERE (tasks.project_id=1)

p.tasks.sum(:priority,:conditions => 'complete=0')
=>SELECT sum(priority) AS sum_priority FROM tasks WHERE (tasks.project_id=1) AND (complete=0)[/code]


5
[code]Task.count(:all,:conditions => ["complete=? and priority=?",false,3])
=>SELECT count(*) AS count_all FROM tasks WHERE (complete=0 and priority=3)

Task.count(:all,:conditions => ["complete=? and priority=?",false,nil])
=>SELECT count(*) AS count_all FROM tasks WHERE (complete=0 and priority=NULL)

Task.count(:all,:conditions => ["complete=? and priority IS ?",false,nil])
=>SELECT count(*) AS count_all FROM tasks WHERE (complete=0 and priority IS NULL)

Task.count(:all,:conditions => ["complete=? and priority IS ?",false,[1,3]])
=>会报错!

Task.count(:all,:conditions => ["complete=? and priority in (?)",false,[1,3]])
=>SELECT count(*) AS count_all FROM tasks WHERE (complete=0 and priority in(1,3))

Task.count(:all,:conditions => ["complete=? and priority in (?)",false,[1..3]])
=>SELECT count(*) AS count_all FROM tasks WHERE (complete=0 and priority in(1,2,3))

Task.count(:all,:conditions => {:complete =>false, :priority => 1})
=>Task count(*) AS count_all FROM tasks WHERE (tasks.'priority' = 1 AND tasks.'complete' = 1)

Task.count(:all,:conditions => {:complete =>false, :priority => nil})
=>Task count(*) AS count_all FROM tasks WHERE (tasks.'priority' IS NULL AND tasks.'complete' = 1)

Task.count(:all,:conditions => {:complete =>false, :priority => [1,3]})
=>Task count(*) AS count_all FROM tasks WHERE (tasks.'priority' IN (1,3) AND tasks.'complete' = 1)

Task.count(:all,:conditions => {:complete =>false, :priority => 1..3})
=>Task count(*) AS count_all FROM tasks WHERE (tasks.'priority' BETWEEN 1 AND 3 AND tasks.'complete' = 1)

Task.find_all_by_priority(1..3)
=>SELECT * FROM tasks WHERE (tasks.'priority' BETWEEN 1 AND 3 AND)[/code]


6 动态find查询
[code]@task = Task.find_by_complete(false,:order = > 'created_at DESC')[/code]


7
[code]<% flash.each do |key,msg| %>
<%= content_tag :div,msg,:id => key %>
<% end %>[/code]


8 避免n+1查询
[code]@tasks = Task.find(:all, :include => [:project,{:comments => :user}])[/code]

9
[code]<% pluralize project.tasks.size, 'task' %>
def self.up
add_column :projects,:tasks_count,:integer,:default => 0

Project.reset_column_information
Project.find(:all).each do |p|
p.update_attributes :tasks_count,p.tasks.length
end
end[/code]

10 group_by
[code]def index
@tasks = Task.find(:all, :order => 'due_at,id',:limit => 50)
@task_months = @task.group_by {|t| t.due_at.beginning_of_month}
end

<% @task_months.each do |month, tasks| %>
<h2><%= month.strftime('%B') %></h2>
<% for task in tasks %>
<div class="task">
<strong><%= task.name %></strong>
due on <%= task.due_at.to_date.to_s(:long) %>
</div>
<% end %>
<% end %>

<% @task_months.keys.sort.each do |month| %>
<h2><%= month.strftime('%B') %></h2>
<% for task in @task_months[month] %>
<div class="task">
<strong><%= task.name %></strong>
due on <%= task.due_at.to_date.to_s(:long) %>
</div>
<% end %>
<% end %>[/code]


11 日期的格式化
在environment.rb中添加移行
Time::DATE_FORMATS[:due_time] = "due ata %B %d on %I:%M %P"
这样就可以使用了
<%= task.due_at.to_s(:due_time) %>


12 定制错误消息到error里
[code]def due_at_string
due_at.to_s(:db)
end

def due_at_string=(due_at_str)
self.due_at = Time.parse(due_at_str)
rescue ArgumentError
@due_at_invaild = true
end

def validate
errors.add(:due_at,"不合格的日期格式") if @due_at_invaild
end[/code]


13
map.home '',:controller = 'projects', :action=>'index'
===
home_path
home_url
---------------------------------------------------------
map.task_archive 'tasks/:year/:month',:controller = 'projects', :action=>'archive'
===
task_archive_path(2007,5)
task_archive_path(:year=>2007,:month=5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值