2007-04-28
每天一剂Rails良药之Versioning Your ActiveRecord Models
关键字: Rails Versioning Your ActiveRecord Models
Wiki有一个功能就是Undo,我们来看看Rails的acts_as_versioned插件
1,安装插件
ruby script/plugin install acts_as_versioned
2,例子
class Chapter < ActiveRecord::Base
acts_as_versioned
end
class AddChapterAndVersionTables < ActiveRecord::Migration
def self.up
create_table :chapters do |t|
t. ...
“social networking”产生了一个东西叫“tagging”,而DHH为Rails写了一个acts_as_taggable插件,简化了Rails开发tagging功能
acts_as_taggable依赖于Rails的polymorphic associations feature,允许对任何model进行tag
1,安装插件
ruby script/plugin install legacy
2,建立数据库表
由于model和tag是Many-to-Many的关系,我们需要建立如下migration
class AddDatabaseStructureForTag ...
2007-04-28
每天一剂Rails良药之Self-referential Many-to-Many Relationships
关键字: Rails Self-referential Many-to-Many Relationships
考虑一个UserStory,Person 1添加Person 2为好友,怎样让Person 2的好友列表中也有Person 1?
这里Person对自己Many-to-Many关联。
class AddPeopleAndTheirFriendsRelationship < ActiveRecord::Migration
def self.up
create_table :people do |t|
t.column "name", :string
end
create_table :friendships do |t|
...
2007-04-28
每天一剂Rails良药之DRY Up Your Database Configuration
关键字: Rails DRY Up Your Database Configuration
由于database.yml十分小巧,我们很容易忘掉它是用YAML这种非常健壮的标记语言来写的。
YAML有一个叫"merge keys"的特性,它可以merge one Hash into another。
例如:
development:
adapter: mysql
database: DRYUpYourDatabaseConfig_development
username: root
password: secret
socket: /tmp/mysql.sock
test:
adapter: mysql
database: DRY ...
2007-04-27
每天一剂Rails良药之Integrating with Legacy Databases
关键字: Rails Integrating with Legacy Databases
针对遗留系统的二次开发或者需要使用遗留数据库时,我们可以突破默认的Rails数据库表名惯例,秘笈就是配置ActiveRecord::Base
为了在整个Rails应用域里起作用,我们将配置写在config/environment.rb里:
ActiveRecord::Base.table_name_prefix = "wp_"
ActiveRecord::Base.pluralize_table_names = false
ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore
A ...
2007-04-26
每天一剂Rails良药之Connecting to Multiple Databases
关键字: Rails Connecting to Multiple Databases
预备知识:
1,Rails启动后没有马上建立数据库连接,而是当model第一次调用connect()方法时建立连接
2,默认情况下ActiveRecord::Base建立数据库连接,然后它的所有子类即所有的model均拥有该连接
3,model查找数据库连接时从自己开始向它的父一层一层查找连接,直到找到为止
如果我们的Rails应用需要建立对多个数据库的连接,我们该怎样做呢?
1,database.yml
development:
adapter: mysql
database: default
username: root
password:
socke ...
一般Rails项目都默认为需要数据库存储支持,但是当我们不需要数据库时,如基于外部WebService的项目和一些测试时,我们可以通过一些小技巧来达到解除数据库依赖的目的
1,修改test_helper.rb
ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'application'
require 'test/unit'
require 'action_controller/test_process'
re ...
公司接了个基于Rails的二次开发的项目,看人家的代码本来就一直云里雾里,今天被routes.rb里的map.resources搞的快崩溃了,上网翻了一下午的资料都未果。
现在有点庆幸,又有点心冷。
一旦有什么问题不明白,喜欢上网翻一堆资料,打开一箩筐网页,然后一个一个边看边比较。
Route Manul
Hypertext Transfer Protocol
HTTP response status code
服务器状态代码含义
RESTful Rails Development
RESTful Rails Development翻译
Discovering a world of Re ...
rake stats可以生成统计代码行数,类的个数,方法的个数等信息,今天我们看看怎样生成rake stats的饼状图。
1,安装ImageMagick
什么新立得包管理器装一下或者apt-get装一下或者下载binary包安装
2,安装RMagick
sudo gem install rmagick
3,安装Gruff
sudo gem install gruff
4,写生成饼状stats图的controller
class GraphController < ApplicationController
require 'gruff'
STA ...
2007-04-24
每天一剂Rails良药之Creating a Custom Form Builder
关键字: Rails Creating a Custom Form Builder
有时候我们希望我们的表单拥有一致的显示风格,今天我们就看看用Rails怎样创建一个Helper来自定义表单。
1,实现自己的FormBuilder
在app/helpers/application_helper.rb里加入以下代码:
class TabularFormBuilder < ActionView::Helpers::FormBuilder
(field_helpers - %w(check_box radio_button)).each do |selector|
src = <<-END_SRC
def #{sel ...
1,Rails1.1及以上版本默认会在config/environments/development.rb里加上下列设置:
config.action_view.debug_rjs = true
这样,当你使用RJS时,如果发生异常,则会有一些非常有用的JavaScript alerts。
2,使用下列方式调用Ajax:
<% if ActionView::Base.debug_rjs %>
<script language="JavaScript">
Ajax.Responders.register({
...
对英文网站,我们常常需要显示一个名词的复数形式。
而Rails就提供了一个称为Inflector的工具来计算该逻辑,并且ActionView有一个wrapper方法来处理常见的复数形式,如:
There are <%= pluralize @recipes.size, "recipe" %>.
当你的网站不是使用English或者有一些比较特殊的复数规则时,我们可以在config/environment.rb里定义这些规则,如:
Inflector.inflections do |inflect|
inflect.plural /^(ox)$/i, '\1en'
...
2007-04-23
每天一剂Rails良药之Use Ajax to Trim Fast, Static Pages
关键字: Rails Use Ajax to Trim Fast, Static Pages
今天让我们看看怎样使用Rails和Ajax得到静态页面。
看下面这个页面:
<ul>
<li>
<div id="product-1" class="product-overview">
<span class="title">Learn to Program (Chris Pine)
<%= link_to_remote "detail",
:update => 'product-1-detail',
...
你可能需要给你的站点用户添加一个主题样式支持。
让我们看看用Rails实现该功能是多简单。
1,给User模型添加类型为string的style字段
2,修改app/views/layouts/application.rhtml
<html>
<head>
<%= stylesheet_link_tag(session[:user].style || "default") %>
</head>
<body>
<div id='main'>
<div id ...
这次我们看看Rails里text_field的auto_complete,即Live Search。
1,添加Recipe的Migration
class AddRecipes < ActiveRecord::Migration
def self.up
create_table :recipes do |t|
t.column :name, :string
end
end
def self.down
drop_table :recipes
end
end
2,添加SearchController
c ...
像蛙眼等有时候需要给用户提供预览查看,今天我们就来看看利用Rails和Prototype快捷的提供Live Preview功能。
1,在layout里加入prototype.js
如app/views/layouts/standard.rhtml:
<html>
<head>
<%= javascript_include_tag "prototype" %>
</head>
<body>
<%= yield %>
</body>
</html>
2,定义En ...
2007-04-22
每天一剂Rails良药之Lightning-Fast JavaScript Auto-completion
关键字: Rails Lightning-Fast JavaScript Auto-completion
Gmail中你输入收信人地址时会自动搜索并提示,速度很快,因为Gmail不是每次都从后台搜索,而是一开始就
把地址加载到页面中,然后在页面中匹配并搜索。让我们看看怎样在Rails里实现它。
1,准备搜索数据
我们创建app/controllers/book_controller.rb:
class BookController < ApplicationController
def authors_for_lookup
@authors = Author.find(:all)
@headers['content-type'] = 'text/javas ...
现在咱生活水平提高了,计算机硬件也上去了,所以ubuntu下装个VMware也用的起了。
本来可以用wine,但同事一致建议我装VMware,说wine有些兼容性怎么不好。
也罢。
下了个VMware Workstation 6.0 Beta for Linux包,同事有给我弄了个简版的Windows的iso包DEEPINXP.6.iso,上网搜了个序列号:
Windows Serial Number: A8HC7-1GGR0-E4PD4-4T694
Linux Serial Number: A8033-17FKN-F5640-48QTE
刚兴奋不久,想试试招行专业版,结果给我报了个 ...
Beast is a small, light-weight forum in Rails with a scary name and a goal of around 500 lines of code when we're done.
Getting Started with Beast:
1,下载源码
svn co http://svn.techno-weenie.net/projects/beast/trunk beast
2,安装RedCloth
sudo gem install RedCloth
3,配置数据库
编辑database.yml
4,生成数据库表 ...
习惯Subclipse的GUI用法可不好,我们不能变成只会用工具的弱智程序员。
1,安装Subversion
sudo apt-get install subversion
2,很好的中文参考使用Subversio进行版本控制,也有pdf版本的,可以慢慢看,边用边学。
尤其是Subversion命令行客户端svn这个命令要好好掌握。
svn子命令
svn add
svn bl ...
本来题目应该为Update Multiple Page Elements With One Ajax Request,但蛙眼的博客标题字数有限,遂更名为RJS,因为这次主要了解的就是Rails的RJS。
让我们看看一个RJS的例子,通过一次Ajax请求灵活的更新页面中的多个元素。
1,新建Rails项目和一个rhtml
如app/views/ajax_fun/index.rhtml:
<html>
<head>
<%= javascript_include_tag :defaults %>
</head>
<b ...
2007-04-20
每天一剂Rails良药之Creating a Drag-and-Drop Sortable List
关键字: Rails Creating a Drag-and-Drop Sortable List
今天来看看用Rails创建一个可拖拽的List。
1,创建Rails项目,搭建数据库
Migration:
class AddPersonAndGroceryListsAndFoodItemsTables < ActiveRecord::Migration
def self.up
create_table :people do |t|
t.column :name, :string
end
create_table :grocery_lists do |t|
t.column :name, :string
...
公司用ubuntu的人不少,我深受影响,今天来装个beryl玩玩3D桌面,看看是是啥效果。
主要安装文档就是beryl的官方Wiki,我参考的安装文档主要就是Install Beryl on Ubuntu Edgy with nVidia这篇。
开始很轻松就装好了,结果高兴之余乱点Beryl管理器,把窗口管理器选成了Compiz,重启X
后一下就白屏了。白茫茫的雪阿。。。
想自己研究解决问题。
重装beryl,不行
重装nVidia驱动,不行
修改xorg.conf重启gdm,不行
downgrade beryl,不行
google一通,还是不行
最后估计是没有清除把窗口管理器选成了 ...
2007-04-18
每天一剂Rails良药之Making Your Own JavaScript Helper
关键字: Rails Making Your Own JavaScript Helper
上次我们在 每天一剂Rails良药之In-Place Form Editing里讲到In-Place编辑,大家意犹未尽吧!
但是现在只能支持text和textarea的In-Place Edit,如何添加一个对select的In-Place Edit呢?
或者说,我们怎样写自己的JavaScript Helper插件呢?
今天我们就在上篇文章的基础上写一个对Rails自带In-Place Editor的扩展,让它支持对select的In-Place Edit,并且了解一下如何写我们自己的JavaScript Helper。
1,了解Rails自带的InPlaceEditor并写我们自己的In ...
看看蛙眼的博客分类管理,有点In Place Editing的意思,是否让用户感觉更方便呢?
Rails有许多很小的好处,让人欲罢不能。
今天来看看Rails使用script.aculo.us让In Place Editing更简单,让你的应用更加Web2.0
1,新建Rails项目,配好数据库设置
rails test
2,添加contacts表
ruby script/generate migration AddContactsTable
然后修改001_add_contacts_table.rb:
class AddContactsTable < Activ ...
WEBrick实在太慢,赶紧换个Mongrel Server吧
用RubyGems安装即可:
sudo gem install mongrel
一路选择安装依赖库即可
在RadRails的Window->Preferences->Rails->Configuration里配置好Mongrel path即可New一个Mongrel Server来跑了
如果在Console下手动启动Mongrel的话,你需要先切换到app的根目录:
cd myRailsApp
mongrel_rails start | mongrel_rails start -d | mongrel_rails ...
Rails的Template可以访问的对象
1,Controller里所有的实例变量
2,Controller Environment里的request, params, cookies, response, session, headers对象
3,表示当前的Controller的controller对象,这样则Template可以调用Controller里的public方法
4,表示模板根目录的base_path对象
1,Rendering Templates
render(:text => string)
render(:inline => string, [:type => "rhtml"|"rxml"])
render(:action => action_name)
render(:file => path, [:use_full_path => true|false])
render(:template => name)
render(:partial => name, ...)
render(:nothing => true)
render()
2,Sending Files and Other ...
Action Pack的Controller建立的环境让我们快捷的访问一些对象:
request
进来的request对象,它有如下属性/方法:
domain()
remoteip()
env()
method
delete?,get?,head?,post?,put?
params
包含request参数的hash-like对象,可以用params[:id]或params['id']访问,习惯用symbol访问
cookies
与request相关的cookies
response
返回的response对象
session
表示当前session数据的hash-like对象
h ...
Active Record有一些富有“魔力”的列名:
created_at, created_on, updated_at, updated_on
在create或者update一行时Rails对_at形式的列用timestamp自动更新,对_on形式的列用date自动更新
lock_version
如果一个表有lock_version这个列,则Rails会跟踪一行的版本号并执行乐观锁
type
单表继承时跟踪一行的type
id
表的默认主键名
xxx_id
对以复数形式的xxx命名的表的引用的默认外键名
xxx_count
对子表xxx维护一个计数器cache
positio ...
- 浏览: 723172 次
- 性别:

- 来自: BJ

- 详细资料
搜索本博客
我的相册
screenshot
共 1 张
共 1 张
最近加入圈子
最新评论
-
Why OO sucks
看成去QQ SUCK 了
-- by xhanxhanxhan -
Rails的富文本编辑器插件 ...
有没有那个像textmate那种语法高亮的富文本编辑器?
-- by zllicho -
翻译www.djangobook.com之 ...
weiertzw 写道 1. >>> from django. ...
-- by chenjihua75 -
PHP、CakePHP哪凉快哪呆 ...
这孩子被java毒害太深。。。跳出java,你会发现外面的世界真的很大。
-- by woodless -
学习svn命令
只会用 apt-get 不是好孩子。
-- by smartly






评论排行榜