Rails 1.2新特性体验(Hash,Integer和class)

[b]1 stringify_keys and symbolize_keys[/b]
[code]>> { 'days' => 25, 'spirit' => 'giving', 'wallet' => 'empty' }.symbolize_keys
=> {:wallet=>"empty", :spirit=>"giving", :days=>25}
>> { 'system' => 'wii', :valid_ages => 5..90 }.stringify_keys
=> {"valid_ages"=>5..90, "system"=>"wii"}[/code]
2 assert_valid_keys 方法判断参数的key值是否正确。
User.find(:first, :with => {:active => 1})
find没有:with key值。assert_valid_keys就能派上用处。
[code]>> about_me = { :height => 71, :weight => 160, :likes => 'monster trucks'
=> {:height=>71, :likes=>"monster trucks", :weight=>160}
>> about_me.assert_valid_keys(:height, :weight, :age)
ArgumentError: Unknown key(s): likes [/code]

3 diff 返回Hash改变或删除的部分
[code] >> name = { :first => 'Chris', :last => 'Wanstrath', :middle => 'Jebediah' }
=> {:first=>"Chris", :last=>"Wanstrath", :middle=>"Jebediah"}
>> name.diff(:first => 'Chris', :last => 'Wanstrath', :middle => 'Jonesy')
=> {:middle=>"Jebediah"}
>> name.diff(:first => 'Chris', :last => 'Wanstrath')
=> {:middle=>"Jebediah"} [/code]

4 from_xml 把xml形式的字符串转换成hash对象
[code]>> Hash.from_xml '<posts><post><id>1</id></post></posts>'
=> {"posts"=>{"post"=>{"id"=>"1"}}}
>> Hash.from_xml '<posts><post><id>1</id></post><post><id>2</id></post></posts>'
=> {"posts"=>{"post"=>[{"id"=>"1"}, {"id"=>"2"}]}}
[/code]

5 bytes, kilobytes, megabytes, gigabytes, terabytes, petabytes, and exabytes
[code]>> 100.bytes
=> 100
>> 5.kilobytes
=> 5120
>> 10.megabytes
=> 10485760
>> 100.gigabytes
=> 107374182400
>> 2.terabytes
=> 2199023255552
>> 1.petabytes
=> 1125899906842624
>> 2.exabytes
=> 2305843009213693952 [/code]

6 seconds, minutes, hours, days, weeks, fortnights, months, years, ago / until, since / from_now
[code]>> 15.seconds
=> 15
>> 2.minutes
=> 120
>> 30.hours
=> 108000
>> 1.days
=> 86400
>> 2.weeks
=> 1209600
>> 4.fortnights
=> 4838400
>> 2.months
=> 5184000
>> 17.years
=> 536479200
>> 2.days.ago
=> Sat Dec 16 00:34:49 -0800 2006
>> 2.days.ago(Time.now - 3.days)
=> Wed Dec 13 00:34:55 -0800 2006
>> 4.weeks.since("1985-03-13".to_time)
=> Wed Apr 10 00:00:00 UTC 1985 [/code]

7 ordinalize
[code]>> 5.ordinalize
=> "5th"[/code]

8 even? 和 odd?判断是奇数还是偶数(multple_of?)
[code]>> 2.even?
=> true
>> 2.odd?
=> false
>> 99.multiple_of? 60
=> false
>> 25.multiple_of? 5
=> true[/code]

9 group_by 有点类似sql里的group_by
[code]>> magical_people = [ { :name => "Santa Claus", :color => "Red" },
{ :name => "Mrs Claus", :color => "Red" },
{ :name => "Twinkle the Elf", :color => "Green "} ]
=> [{:name=>"Santa Claus", :color=>"Red"}, {:name=>"Mrs Claus", :color=>"Red"}, {:name=>"Twinkle the Elf", :color=>"green "}]
>> magical_people.group_by { |person| person[:color] }
=> {"Green "=>[{:name=>"Twinkle the Elf", :color=>"green "}],
"Red"=>[{:name=>"Santa Claus", :color=>"Red"}, {:name=>"Mrs Claus", :color=>"Red"}]} [/code]

10 index_by 可以与上面方法对应。此方法是根据某一个key进行排序
[code]>> beatles = [{ :first => 'John', :last => 'Lennon' },
{ :first => 'Paul', :last => 'McCartney' },
{ :first => 'Evan', :last => 'Weaver' },
{ :first => 'Ringo', :last => 'Starr' }]
=> [{:first=>"John", :last=>"Lennon"}, {:first=>"Paul", :last=>"McCartney"}, {:first=>"Evan", :last=>"Weaver"}, {:first=>"Ringo", :last=>"Starr"}]
>> beatles.index_by { |beatle| beatle[:first] }
=> {"Evan"=>{:first=>"Evan", :last=>"Weaver"},
"Paul"=>{:first=>"Paul", :last=>"McCartney"},
"John"=>{:first=>"John", :last=>"Lennon"},
"Ringo"=>{:first=>"Ringo", :last=>"Starr"}}
[/code]

11 sum
[code]>> [1,2,3,4,5].sum
=> 15
>> Recipe.find(:all).sum { |recipe| recipe.total_time.to_i }
=> 1777[/code]

12 alias_attribute 。为某一字段定义一个别名
[code]class User < ActiveRecord::Base
alias_attribute :user_id, :id
end

>> user = User.find(:first)
=> #<User:0x12622fc ... >
>> user.id
=> 1
>> user.user_id
=> 1
>> user.user_id?
=> true[/code]

13 attr_accessor_with_default方法重写了attr_accessor方法。在定义时给属性一个默认值。
[code]class Homework
attr_accessor_with_default :sucks, true
end

>> assignment = Homework.new
=> #<Homework:0x2082f94>
>> assignment.sucks
=> true
[/code]

14 class_inheritable_* 方法
只与类变量结合使用。class_inheritable_*定义的类变量不在父类和子类之间share。子类改变不会影响到父类。
class_inheritable_reader, class_inheritable_writer, class_inheritable_array_writer, class_inheritable_hash_writer, class_inheritable_accessor, class_inheritable_array, class_inheritable_hash
[code]
class Momma
class_inheritable_hash :looks
self.looks = { :hair => 'blonde', :eyes => 'blue' }
end

class Kid < Momma
end

=> {:hair=>"blonde", :eyes=>"blue"}
>> Momma.looks
=> {:hair=>"blonde", :eyes=>"blue"}
>> Kid.looks
=> {:hair=>"blonde", :eyes=>"blue"}
>> Kid.looks.update :eyes => "brown"
=> {:hair=>"blonde", :eyes=>"brown"}
>> Kid.looks
=> {:hair=>"blonde", :eyes=>"brown"}
>> Momma.looks
=> {:hair=>"blonde", :eyes=>"blue"} [/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值