`
杯具的茶几
  • 浏览: 3131 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

学习笔记

 
阅读更多

一、 RVM 自动切换版本
项目目录,建立一个 .rvmrc 文件。
在这个文件里可以很简单的加一个命令:
rvm use 1.9.2
进入到这个目录就会自动切换版本

二、 rails2 发现的注入漏洞
Question.find(:first, :conditions => { :id => { "questions.id" => 1 }})
生成的 SQL 语句是 SELECT * FROM `questions` WHERE (`questions`.`id` = 1) LIMIT 1 这样已经忽略了真正的 id 参数!完全可以由得到此表的任何数据。解决方法:转换传入参数的类型,数字参数要 to_i 字符串参数要 to_s 这样可以过滤掉客户端传入的哈希。

三、 rails3.0 发现的注入漏洞
Post.where(:id => { :posts => {:author_id => 10} }).first
生成的 SQL 语句是 SELECT * FROM ‘posts’ WHERE (‘ posts.author_id = 10 LIMIT 1 已经忽略了 id 参数。解决方法:转换传入参数的类型,数字参数要 to_i 字符串参数要 to_s 这样可以过滤掉客户端传入的哈希。

四、 解决大量数据循环操作问题
假设你有个百万级别客户的电商网站,假设每个用户对象需要 500 字节,上面的代码会在运行的时候消耗 500M 内存,更好的方式是使用 Member.all.find_each 方法代替 Member.all.each ,一次性加载 1000 ( 默认 ) 记录到内存中处理,直到将所有数据都处理完, find_each 有两个参数:
batch_size: 一次加载的数据,默认是 1000
start:
统一个处理队列中,开启多个 workers?

五、 常用插件

a)        用户插件 http://github.com/plataformatec/devise

b)        权限插件 https://github.com/ryanb/cancan

用户插件与权限插件整合的例子
https://github.com/RailsApps/rails3-bootstrap-devise-cancan

六、一个避免出现危险的书写习惯

这种写法忽略掉了用户id的判断,应该避免这种书写习惯

ship_add =  OrderAddress.find_by_id(id)

ship_add.destroy

应该改成这种书写习惯

ship_add = member_curr.order_address.find_by_id(id)

ship_add.destroy

七、一个没理解的问题

为什么1-0.99得到的结果不是0.01 ?

1-0.99
=> 0.010000000000000009

八、ruby的try方法

尝试执行某些代码,可以避免产生意外错误!看好了!这不是java的异常处理方法!

通常我们要获取某个对象的属性 为了保证安全性一定要先判断对象本身是否为空

@person && @person.name 
#或者 
@person ? @person.name : nil

#新的写法
@person.try(:name)
#还接受参数和代码块
Person.try(:find, 1)
@people.try(:collect) {|p| p.name}
@person.try { |p| "#{p.first_name} #{p.last_name}" }

九、查询某条数据的前后N条数据

def self.get_side_logs(id, limit = 5)
    sql = <<-EOF
    (SELECT * FROM sign_in_logs WHERE id < #{id} ORDER BY id DESC LIMIT #{limit})
    UNION ALL
    (SELECT * FROM sign_in_logs WHERE id > #{id} ORDER BY id LIMIT #{limit})
    ORDER BY ID ;
    EOF
    
    find_by_sql(sql)
end 

十、字符串的单数复数转换

"Business".singularize  => "Busines" # 转单数
"moose".pluralize => "mooses"  # 转复数
 

十一、Gemfile文件

#source定义bundler的资源,默认使用的是 在国内某些地区访问外国很慢可以改成淘宝源
source 'https://rubygems.org'
source 'http://ruby.taobao.org'

# 第二个参数可以指定版本
gem "rails", "3.0.4" 

# 也可以不指定版本,这样会安装最新版本
gem 'mysql2'
  
# 如果 require 的包名不同,可以加上 :require明确指定包名
gem "sqlite3-ruby", :require => "sqlite3"

# 可以用 Git 做来源,甚至可以指定 branch, tag 或 ref。
gem 'authlogic', :git => 'git://github.com/odorcicd/authlogic.git', :branch => 'rails3'

# 也可以直接指定路径
# gem "rails", :path => '/users/local/github/rails'

# Group 功能可以根据不同环境载入
group :development, :test do
   gem "rspec", "~> 2.0"
   gem "rspec-rails", "~> 2.0"
end

#版本号的指定方式除了特定版本,还可以指定大于等于某个版本
gem "rails", ">= 2.3.5"

#最建议的方式是使用~>语法,意思是x.y固定,但可以大于等于z。 例如~>1.3.5 意思是1.3.5,1.3.6, 1.3.9可以安装,但是1.4.0, 2.0.1不可以安装。
#x版本号升级表示有API发生不可向后的兼容性变动,y版本号升级表示有新功能增加,z版本号升级表示bug修正。因此这种写法可以让我们更有弹性的升级。
gem "rspec", "~> 2.0"
 

十二、instance_of?和kind_of?方法的区别

    module M;    end
    class A
      include M
    end
    class B < A; end
    class C < B; end
    b = B.new
    b.instance_of? A   #=> false
    b.instance_of? B   #=> true
    b.instance_of? C   #=> false
    b.instance_of? M   #=> false
    b.kind_of? A       #=> true
    b.kind_of? B       #=> true
    b.kind_of? C       #=> false
    b.kind_of? M       #=> true
 

十三、方法中判断调用时是否传递了yield

 

if block_given?
      tree.each do |board, level|
        yield board, level
      end
    end
 

 

分享到:
评论

相关推荐

    2022吴恩达机器学习笔记汇总(共10章节).zip

    2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    Springcloud学习笔记.md

    Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...

    PHP个人学习笔记

    PHP个人学习笔记

    CCNA学习笔记 CCNA学习笔记

    CCNA学习笔记 CCNA学习笔记 CCNA学习笔记

    希沃白板学习笔记.pdf

    希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf

    Go学习笔记第四版

    Go 学习笔记 第四版 雨痕 ⼆二〇⼀一四年末 下载:不定期更新,https://github.com/qyuhen/book。 联系:qyuhen@hotmail.com 2012-01-11 开始学习 Go。 2012-01-15 第⼀一版,基于 R60。 2012-03-29 升级到 1.0。 ...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    Linux学习笔记 (华为工程师总结) 完整版PDF

    《Linux学习笔记》这份资料非常全面且详细,从 Linux 常用命令到 Linux 常用操作,再到网络管理、性能优化,几乎覆盖了 Linux 基础学习的方方面面,非常适合初学者入门!这里只是对于常用命令进行了整理,希望可以...

    Learning hard C# 学习笔记

    Learning hard C# 学习笔记

    springcloudalibaba学习笔记

    springcloudalibaba学习笔记

    林轩田-吴恩达机器学习笔记.pdf

    林轩田-吴恩达机器学习笔记.pdf

    Java JDK7学习笔记-光盘

    《Java JDK7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。《Java JDK7学习笔记》针对java se 7新功能全面改版,无论是章节架构...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    Python学习笔记(干货) 中文PDF完整版.pdf

    这份"Python学习笔记"涵盖了从环境搭建到基础语法,再到数据类型和控制结构等关键知识点,旨在为初学者提供全面的学习指导。 首先,1.1章节介绍了Python的基础,包括Python的起源和历史。Python是由Guido van ...

    go语言学习笔记

    go语言学习经典数据,雨痕,go语言学习笔记 第四版 pdf版本

    Python开发基于Flask的在线学习笔记练手项目流程实战_优秀案例实例源代码源码.zip

    基于F|ask的在线学习笔记 ( Wtforms+ passlib+ MySQL+ PymySQL实现) 杨绛在《钱钟书是怎样做读书笔记的》一文中写到:“许多人说,钱钟书记忆力特强,过日不忘他本人却并不以为自己有那么「神」。他只是好读书,肯下功夫...

    cad12学习笔记

    cad12学习笔记cad12学习笔记cad12学习笔记cad12学习笔记cad12学习笔记cad12学习笔记

    良葛格JAVA学习笔记

    随着学习资源的增多,一本高质量的学习笔记显得尤为重要。而今天,我们要介绍的这份《良葛格JAVA学习笔记》便是一份得到广泛好评,深受学习者喜爱的学习资源。 首先,我们不得不提的是这份笔记的作者——“良葛格”...

    contiki 学习笔记

    Contiki学习笔记:进程、事件、etimer关系 Contiki 实例: Contiki学习笔记:创建两个交互进程 Contiki 主函数剖析: Contiki学习笔记:main函数剖析 Contiki学习笔记:启动一个进程process_start Contiki学习笔记...

Global site tag (gtag.js) - Google Analytics