require File.dirname(__FILE__) + '/../test_helper'
class UserTest < Test::Unit::TestCase
fixtures :users
def test_full_name_without_middle_initial
user = User.new(:first_name => 'John', :last_name => 'Doe')
assert_equal 'John Doe', user ...
- 14:56
- 浏览 (83)
- 评论 (0)
- 分类: Railscasts学习笔记
接着010里面的例子,让我们先写User类的单元测试吧
require File.dirname(__FILE__) + '/../test_helper'
class UserTest < Test::Unit::TestCase
fixtures :users
def test_full_name_without_middle_initial
user = User.new(:first_name => 'John', :last_name => 'Doe')
assert_equal 'John Doe', user.full_name ...
- 14:34
- 浏览 (91)
- 评论 (0)
- 分类: Railscasts学习笔记
有这么几行视图代码,用来显示英文全名
Name:
<%= @user.first_name %>
<%= "#{@user.middle_initial}." unless @user.middle_initial.nil? %>
<%= @user.last_name %>
当我们希望在多个页面内都显示这个全名,是否每次都要写这么4行代码呢?
想想我们的DRY原则,放弃这种不优雅的做法吧
class User < ActiveRecord::Base
def full_name
name = first_name ...
- 13:50
- 浏览 (92)
- 评论 (0)
- 分类: Railscasts学习笔记
当我们注册用户的时候,在日志中会自动保存一些敏感的字段,比如password等。
Processing LoginController#save (for 127.0.0.1 at 2008-04-08 13:53:22) [POST]
Session ID: b40f205b38bd05382dc8ef2f362f5d5b
Parameters: {"user"=>{"password_confirmation"=>"aaaaaa111", "login_name"=>"sora", "display_name"=>"Sora", "password"=>"aaaaaa111"} ...
- 14:06
- 浏览 (95)
- 评论 (0)
- 分类: Railscasts学习笔记
如果我们希望在不同页面使用不同的样式,我们可以使用layouts + content_for,如第8行:
<!-- layouts/application.rhtml -->
<!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>
<%= styles ...
- 13:37
- 浏览 (83)
- 评论 (2)
- 分类: Railscasts学习笔记
一般说来,layouts有5种:global layouts, controller layouts, shared layouts, dynamic layouts, action layouts.
假设有这样一个视图
<!-- views/projects/index.rhtml -->
<h2>Projects</h2>
<ul>
<% for project in @projects %>
<li><%= project.name %></li>
<% end %>
</ul>
1. global layo ...
- 14:13
- 浏览 (95)
- 评论 (0)
- 分类: Railscasts学习笔记
我们经常需要将一个代码块传递给迭代器,并在代码块中调用另一个方法。Rails提供了一条实现这一功能的捷径,于是下面两句代码等价:
groups = posts.group_by { |post| post.author_id }
groups = posts.group_by(&:author_id)
让我们看下这一切是如何工作的:
class Symbol
# Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:
#
# ...
- 16:27
- 浏览 (83)
- 评论 (0)
- 分类: Railscasts学习笔记
接着004中的例子,004中我们希望找出所有未完成的任务,好吧,我承认,我半途而废的事实在是太多了,也许有几百个上千个,谁知道呢,一张A4纸肯定打不下,也许我应该先列出前20条,一条一条解决以后再去考虑后面的?
事实就是这样,我要列出找到的前20条,并且距现在最近的事排在前面最先解决,更加以前的事就算忘了对现在的我也没什么影响。于是按照前面的方法,我们会这样说
Task.find_all_by_complete(false, :limit => 20)
进一步的,我们照004中的办法把find移入model,并且使用了with_scope,我们仍然能往find_incomplete里传入ha ...
- 13:45
- 浏览 (80)
- 评论 (0)
- 分类: Railscasts学习笔记
根据DHH提出的DRY原则,我们将一个公用的find方法移入model类(比如本例中的查找所有未完成的任务),然后就可以在controller中多次重用,也包括通过表间关联来查找。
# tasks_controller.rb
def index
@tasks = Task.find_incomplete
end
# models/task.rb
def self.find_incomplete
find_all_by_complete(false, :order => 'created_at DESC')
end
# projects_controller.rb ...
- 13:07
- 浏览 (80)
- 评论 (0)
- 分类: Railscasts学习笔记
Rails不要求在迁移任务中建立外键约束,在迁移任务中创建project_id字段后在Project和Task模型中加上相应的声明。
# project.rb
has_many :tasks
# task.rb
belongs_to :project
# projects_controller.rb
def show
@project = Project.find(params[:id])
@tasks = Task.find(:all, :conditions => [ 'project_id = ? AND complete = ?', @project.id ...
- 16:30
- 浏览 (73)
- 评论 (0)
- 分类: Railscasts学习笔记
@tasks = Task.find(:all, :conditions => [ 'complete = ?', false ])
@task = Task.find(:first, :conditions => [ 'complete = ?', false ], :order => 'created_at DESC')
以动态的find_by和find_all_by方法缩短查询语句,以下代码等效。
@tasks = Task.find_all_by_complete(false)
@task = Task.find_by_complete(false, :order => 'crea ...
- 15:59
- 浏览 (98)
- 评论 (0)
- 分类: Railscasts学习笔记
看了Kevin Yang对初学者的建议,终于决定开始学习Railscasts了,目前一共有99个例子,暂且希望能每天坚持学习至少一个,并以文字的形式表述出来。
User.find(session[:user_id])
以上代码每次都会向数据库发起一条查询请求,为了提高性能,只需要多加一个或标记,就可以在已赋值的情况下不再发起查询请求。
@current_user ||= User.find(session[:user_id])
不过,论坛中的某位高人说了:
hideto 写道看起来不错,但是实际上有问题:
实例变量的作用域是一次请求,即一次请求结束后@current_user这个实 ...
- 15:05
- 浏览 (122)
- 评论 (0)
- 分类: Railscasts学习笔记
- 浏览: 4748 次
- 性别:

- 来自: 南京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
render与redirect_to的区 ...
redirect_to会执行被渲染的那个action,而render不会,这跟你 ...
-- by alanyuqiang -
#008_layouts和content_fo ...
这是最普遍的用法,不知道楼主有没研究过,content_for,yield在不同 ...
-- by alanyuqiang -
#008_layouts和content_fo ...
...
-- by alanyuqiang -
render与redirect_to的区 ...
不错,最近正为这个发愁呢!
-- by evil850209 -
如何在update一条记录的部 ...
theone 写道wiisola 写道theone 写道update_all [ ...
-- by wiisola






评论排行榜