Hegel2011的博客

读书 - 工作 - 生活 - 笔记

Rails3.1使用手记

HTML use syntax: true

bundle 执行的对象是Gemfile,而bundle install 后会在Gemfile.lock文件中产生gem及其版本的依赖,所以在Gemfile中不再需要声明版本号 据说这是大胡子忙了1年左右的成果。确实是改善内部关系的好东西。

therubyracer 是内建于ruby vm的js解释器,ree并没有自带,mri已自带 有人谈论不好,有人认为挺好,个人认为不是问题

js和css似乎会自动编译 不过真是部署还是需要 rake assets:precompile来在public/assets目录下产生css文件 Sprockets来自动集成js成一个文件,css成一个文件 uglifier 生产环境下来压缩静态文件

console里面的

reload!
可以重新加在修改过的文件

view层也带继承了 这是很大的一个进步,view终于获得了应有的地位

after_find #一个回调函数
first last #不像find那样会报NoRecord的error
find_each #批量查询方法,避免整个表拿出来
find_in_batches #同find_each类似,就是取出的是一个集合

join

Post.joins(:category, :comments)
Category.joins(:posts => [{:comments => :guest}, :tags])

clients = Client.includes(:address).limit(10) 使得原本11句查询,变成了2句,先查出client,然后通过client_id in(x,x …)查出address的结果

find_by_first_name, find_all_by_first_name, find_by_name!
Client.find_or_initialize, Client.find_or_create


Post.where(:published => true).any? 检查是否exist?


<%=form_for([@post, @post.comments.build]) do |f| %>
#新版的form_for前用<%=,注意多了=号,挺无聊的追求,对new的要求可以放到view里面来写,一来这确实只是为了view的需要,另一方面今后其他action复用view的话不用再在controller里面new了

常用的操作

<%= render :partial => "comments/comment",
:collection => @post.comments %>
<%= render "comments/form" %>
<%= link_to 'Destroy Comment', [comment.post, comment],
:confirm => 'Are you sure?',:method => :delete %>

嵌套form

accepts_nested_attributes_for :tags, :allow_destroy => :true,
    :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
<%= form.fields_for :tags do |tag_form| %>

rails的callback不能直接使用def after_safe,而需要用after_save :method的方式来定义一个执行链 新版的规矩

比较好的git教程

ihow的template https://github.com/ihower/rails3-app-template/blob/master/Gemfile,可以发现不少实用的操作,以及一些常用的gem包

simple_form 这个插件

annotate 自动标注,这里面学到了新的配置Gemfile的方法和执行通过Gemfile安装的特定的gem的使用方法

Gemfile

gem 'annotate', :git => 'https://github.com/ctran/annotate_models.git' #, :branch => 'rake_compatibility' #指定通过git来安装,也可再跟上一个branch

通过上述方法安装的可运行gem,需要通过 bundle exec annotate 来运行

Included file 'twitter_sharing.html' not found in _includes directory