读书笔记

Scripts/console脚本允许你把Rails应用的一部分拿到irb会话中运行,从而对方法进行测试

ruby script/generate controller Admin::Book action1 action2 在admin目录下创建bookcontroller

<%= debug(@order) %>

访问属性:
如果一个model 对象有个属性名为balance,你可以使用索引操作符,传递给它一个字
符串或一个符号(symbol)来访问这个属性的值。这儿是我们将使用的符号。
account[:balance] #=> return current value
account[:balance] = 0.0 #=> set value of balance
account.balance #=> return current value
account.balance = 0.0 #=> set value of balance

在model 本身的代码内部,你可使用read_attribute()和write_attribute()私
有方法。这些接受做为字符串参数的属性的名字

要在一个条件句内查询一个列,你必须附加一个问号给列的名字
user = Users.find_by_name("Dave")
if user.superuser?
grant_privileges
end

指定连接的一种方式是使用establish_connection()类方法
下面调用在服务器dbserver.com上使用给定的用户名字和口令,创建了一个对名为railsdb 的MySQL 数据库的连接。这是所有的model 类共用的缺省连接。
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "dbserver.com",
:database => "railsdb",
:username => "railsuser",
:password => "railspw"
)

order new的方法(3种):
an_order = Order.new
an_order.name = "Dave Thomas"
an_order.email = "dave@pragprog.com"
an_order.address = "123 Main St"
an_order.pay_type = "check"
an_order.save
Order.new do |o|
o.name = "Dave Thomas"
# . . .
o.save
end
an_order = Order.new(
:name => "Dave Thomas",
:email => "dave@pragprog.com",
:address => "123 Main St",
:pay_type => "check")
an_order.save


Active Record 还有一个方便的方法create()。它是既实例化model 对象又把它存储
到数据库中。

还可以给create()传递一个属性哈希表数组;它将在数据库中创建多行记录并返回一个对应的model 对象数组。
orders = Order.create(
{},{}
)


find(使用占位符):
name = params[:name]
pos = Order.find(:all,
:conditions => ["name = ? and pay_type = 'po'", name])

name = params[:name]
pay_type = params[:pay_type]
pos = Order.find(:all,
:conditions => ["name = :name and pay_type = :pay_type",
{:pay_type => pay_type, :name => name}])

pos = Order.find(:all,
:conditions => ["name = :name and pay_type = :pay_type", params])

order by 的用法
orders = Order.find(:all,
:conditions => "name = 'Dave'",
:order => "pay_type, shipped_at DESC")

以使用:limit 参数,限制find(:all,...)返回的记录行的数目。如果你使
用:limit 参数,你或许也想指定排序以确保得到一致的结果。
例如,下面返回前10 个匹配的定单。
orders = Order.find(:all,
:conditions => "name = 'Dave'",
:order => "pay_type, shipped_at DESC",
:limit => 10)


使用attributes(),attribute_names(),attribute_present?()等方法来看model 对象哪些属性可用。第一个返回一个属性的(名/值)对的哈希表,第二个是名字数组,第三个是如果一个有名字的属性在model 可用的话,返回true。
orders = Order.find_by_sql("select name, pay_type from orders")
first = orders[0]
p first.attributes
p first.attribute_names
p first.attribute_present?("address")
这是输出
{"name"=>"Dave Thomas", "pay_type"=>"check"}
["name", "pay_type"]
false
使用as xxx的SQL 语法给定结果集中的一个列的名字,这个名字就将成为属性名
count_by_sql()返回由sql 语句( select count(*) from ...)生成的行数。

Order model 有以下属性如:name,email,和address。我们可以在finder
方法中使用这些名字,并返回那些相应匹配这些值的列的记录行。
order = Order.find_by_name("Dave Thomas")
orders = Order.find_all_by_name("Dave Thomas")
order = Order.find_all_by_email(params['email'])
order = Order.find_by_name("Dave Thomas", other args...)
会由Active Record 有效地转换成
order = Order.find(:first,
:conditions =>["name= ?", "DaveThomas"],other_args...)

user = User.find_by_name_and_password(name, pw)
它相当于user = User.find(:first,
:conditions => ["name = ? and password = ?", name, pw])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值