agile WEB development with rails的笔记

开发工具:
TextMate( http://macromates.com/)Ruby/Rails编辑器,Mac OS.
RadRails( http://www.radrails.org/).
jEdit( http://www.jedit.org/)
Komodo( http://www.activestate.com/Products/komodo/)
Arachno Ruby( http://www.ruby-ide.com/ruby/ruby_ide_and_ruby_editor.php)
资源: http://api.rubyonrails.org
Rails友好的ISP列表: http://wiki.rubyonrails.com/rails/pages/RailsWebHosts
 
Rails和数据库
需要两个软件层来链接你的应用代码到数据库引擎:
1.数据库驱动,一个将低层数据库API连接到高层Ruby编程世界的Ruby库。
2.Rails数据库适配器,位于Ruby库以及你的应用之间每个数据库类库将有其自己的数据库特定的API,Rails数据库适配器将区别引藏以使一个Rails应用不需要知道运行于哪个数据库之上。
支持的数据库:DB2,MySQL,Oracle,Postgres,Firebird,SQL Server,SQLIte。除开MySQL你都需要安装一个数据库驱动。同时,需要记住要将你的数据库驱动装入正确版本的Ruby。
相关的数据库驱动地址:
DB2 http://raa.ruby-lang.org/project/ruby-db2
Firebird http://rubyforge.org/projects/fireruby/
MySQL http://www.tmtm.org/en/mysql/ruby
Oracle http://rubyforge.org/projects/ruby-oci8
Postgres http://ruby.scripting.ca/postgres/
SQL Server (see note after table)
SQLite http://rubyforge.org/projects/sqlite-ruby
 
创建自己的Rails API文档
rails_apps> rails dummy_app
rails_apps> cd dummy_app
dummy_app> rake rails:freeze:gems
dummy_app> echo >vendor/rails/activesupport/README
dummy_app> rake doc:rails
 
MySQL以及SQLite也可以作为RubyGems进行下载(分别使用mysql以及sqlite进行)。
安装SQL Server适配器:
1.找到/Ruby/lib/ruby/site_ruby/1.8/DBD,在该目录下创建一个ADO目录。
2.在 http://ruby-dbi.sourceforge.net找到最终发布的Ruby-DBI源代码。
3.将DBI版本解压到一个本地目录,转到该目录并转到src/lib/dbd_ado。将ADO.rb从该目录拷到新建的ADO目录中。
SQL Server适配器只工作于Windows系统,因为它依赖于Win32OLE。
 
第四章 实时回报
“rails”命令:简单地为我们创建目录结构并且使用一些标准Rails来填充它。
work> rails demo
create
create app/controllers
create app/helpers
create app/models
: : :
create log/development.log
create log/test.log
work>
启动服务器:
ruby script/server
生成Controller:
ruby script/generate controller Say
控制器位于app/controllers/say_controller.rb
Rails使用路径来判断要使用的控制器的名称和在该控制器中要调用的action。跟随应用的路径的第一部分是控制器的名称,第二部分是action的名称。
 
创建action:
class SayController < ApplicationController
def hello
end
end
视图被放在app/views/say目录中。
缺省的,Rails使用其控制的action相同的名称来指找相同名称的模板文件。
在Rails中有两种方法来创建动态模板:使用叫做Builder的技术或是将Ruby代码嵌入到模板自身。
REb:(Embedded Ruby)。
在<%=以及%>中的内容被表现为Ruby代码并被执行,执行结果被转换为string。在<%以及%>被表示为没有输出的Ruby代表来执行。将%>替换为-%>来阻止输出插入空行。
Rails使用了一些Ruby magic因而控制器对象的实便变量被注入到模板对象中,view模板可以访问被设置进控制器的实例变量,如他们自身的一样。
Rails搜索app/views中与控制器相同名称的子目录,并且在该子目录中搜索action名称的文件。并通过ERb来来处理这些模板。
 
第五章 Depot应用
 
第六章 目标A:产品维护
Rails简单地使用普通文件来配置数据库,你可以在config/database.yml中找到配置项。它实际上包含三个部分,分别是development,test以及production数据库。
database.yml:
development:
adapter: mysql
database: ttt_development
username: root
password:
host: localhost
注意:配置参数必须与冒号中间留一个空格,否则不能正确处理。
若你将用户名留白,MySQL将可能尝试使用当前登录的用户名登录。但是我们收到一些MySQL数据库驱动以及操作系统将这些域留白的话将导致Rails使用root用户连接到数据库。
创建基于特定数据库的应用:
rails depot --database=sqlite3
rails命令帮助:rails --help
常见数据库配置问题:
可以从命令行创建表但是运行rake db:migrate失败:检查database.yml文件,若有socket:directives在该文件中,将它注释起来。
有些客户端显示Client does not support authentication protocol requested by server,则考虑更新MySQL客户端。被安装的MySQL和用于访问的库的版本不兼容问题可以通过下面的指令( http://dev.mysql.com/doc/mysql/en/old-client.html)并提交一个MySQL命令,如”set password for ‘some_user’@’some_host’=OLD_PASSWORD(‘newpwd’);来解决”。
最后,读取database.yml的YAML库对于制表符有奇怪的敏感性问题,若你使用制表符会导致问题。
 
创建Products模型以及表
使用Rails,你可以定义database migration。每个migration代表你要对数据库做出的一个改变。被使用数据库独立的术语的一个源文件来表示。你可以应用这些migration以更新你的数据库存,并且你不高兴的话可以将他们回滚。
在你使用generator创建新模型的时候,Rails自动创建一个你可以用于创建相关的表的migration。在Rails中,一个模型自动被映射至一个该模型的名称的复数形式作为名称的表中。
创建模型:
ruby script/generate model Product
生成的migration带有一个有前缀数字的描述性名称,并且具有文件后缀”.rb”
class CreateProducts < ActiveRecord::Migration
def self.up
create_table :products do |t|
t.column :title, :string
t.column :description, :text
t.column :image_url, :string
end
end
def self.down
drop_table :products
end
end
 
class AddPrice < ActiveRecord::Migration
def self.up
add_column :products, :price, :integer, :default => 0
end
def self.down
remove_column :products, :price
end
end
 
class AddTestData < ActiveRecord::Migration
def self.up
Product.create(:title => 'Pragmatic Version Control' ,
:description =>
%{<p>
This book is a recipe-based approach to using Subversion that will get you up and running quickly--and correctly. All projects need version control: it's a foundational piece of any project' s infrastructure. Yet half of all project teams in the U.S. don't use any version control at all. Many others don't use it well, and end up experiencing time-consuming problems.</p>},
:image_url => '/images/svn.jpg' ,
:price => 2850)
# . . .
end
def self.down
Product.delete_all
end
end
 
up()方法在应用migration到数据库时使用。这里是定义我们的表的代码存放的地方。down()方法取消up()方法所做的事情,在恢复数据库存到前一个版本时使用。
使用migrate:
rake db:migrate
rake查找所有没有被应用到数据库的migration并应用它们。Rails使用叫做schema_info的表来跟踪版本号。
 
为应用加入scaffold:
在controller中定义:
class AdminController < ApplicationController
scaffold :product
end
 
 
scaffold声明告诉Rails在运行时生成应用程序代码,:product参数告诉它我们想使用product model来维护数据。Rails scaffold是一个用于操作一个模型的自动生成的框架。
Rails在一个浏览器发送一个请求时重新载入一个模型文件,因而该模型总是反射当前的数据库表。同时,控制器内的scaffold 声明将会为每个请求重新载入(因为控制器也会被重新载入),因而它可以使用该模型的信息来更新其显示的屏幕。
 
验证示例:
class Product < ActiveRecord::Base
validates_presence_of :title, :description, :image_url
validates_numericality_of :price, :only_integer => true
validates_uniqueness_of :title
validates_format_of :image_url,
:with => %r{/.(gif|jpg|png)$}i,
:message => "must be a URL for a GIF, JPG, or PNG image"
protected
def validate
errors.add(:price, "should be positive" ) if price.nil? || price <= 0
end
end
 
生成静态scaffold:
ruby script/generate scaffold product admin
所有的scaffold生成的应用使用public/stylesheets目的下的scaffold.css。
 
第七章 任务B:分类显示
创建带有action的controller:
ruby script/generate controller store index
像大多数web服务器一样,若你调用一个Rails控制器并且不明确指定一个action,Rails自动调用index action。
加入一个页面框架:
在Rails中我们可以定义框架。
在Rails中有多种方法可以指定并使用框架。我们选择了最简单的一种,若你在app/views/layouts目录中创建与控制器同名的模板文件,所有由该控制器渲染的视图缺省情况下将会使用该框架。
 
创建帮助器:
Rails generator自动为每个控制器创建一个帮助文件,Rails 命令自身创建application_helper.rb。我们定义在特定控制器相关的帮助器对于由该控制器引用的视图可用。在整个application_helper文件中的方法对于所有的应用视图可用。
定义helper:
module StoreHelper
def format_price(amount)
dollars, cents = amount.divmod(100)
sprintf("$%d.%02d" , dollars, cents)
end
end
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值