ruby 1.9一些特性
hash key value
key:value
name:'wang'
status: :frozen
:不要与前面有空格
lambda语法
l = ->(arg) { puts arg }
l = lambda{|arg| puts arg}
1 ActiveRecord链式调用,scope
Task.where(status:3).joins(:inquire).offset(3).limit(3).order("tasks.inquire_state desc")
update_all 一个参数,不接受条件
Task.where(status:3).update_all ""
Hash 条件
where(name:'he',age:(1..10)) #范围
where(name:'he',age:[3,6,9]) #子集
Post.where.not(author: author) #非
named_scope -> scope
unscope 删除所有作用域(包括default_scope)
2 coffeescript
缩进敏感的js小兄弟
turbolink 一半天使、一半魔鬼
如果你需要手工的排除一些链接,不让Turbolinks帮你处理这些请求,你可以添加data-no-turbolnk属性到链接标签里面。
把js 和 css打包成一个文件,默认链接只更新body部分
$(document).ready每次新进的页面(地址栏回车,跳转)或者 刷新都会执行。
$(document).on "page:change每次 Turbolinks 工作时执行。
简单的说,一般情况下ready 函数一般只执行一次,而 page:change 在每次页面切换时都会执行。
$(document).ready -> alert "我在 Turbolinks 下只执行一次。"
$(document).on "page:change", -> alert "我在 Turbolinks 下每次都执行。"
$ ->
# 只会执行一次,页面切换不会再执行
#some thing
#页面切换
$(document).on "page:change", ->
#some thing
强烈不建议使用 turbolink,坑太多
3 sass
继承,减少重写样式
rake assets:precompile
4 remote:true
link_to ,form_tag 等
rjs模版引擎
$("#list").html(j render partial: 'xxxxxx')
5 accepts_nested_attributes_for :author, :pages
接受嵌套属性
class Contact
has_many :icc_phones
accepts_nested_attributes :icc_phones
end
Contact = Contact.new
params.require(:contact).permit(:name,:icc_phones_attributes:[:city_code,:phone_no,:_destroy])
= form_for @contact do |f|
name:
= f.text_field :name
= f.fields_for :icc_phones,f.object.icc_phones.first do |ff|
= f.fields_for :icc_phones,f.object.icc_phones.build do |ff|
city_code:
= ff.text_field :city_code
phone_no
= ff.text_field :phone_no
= ff.check_box :_destroy
6 routing
(get/post) 'profile', to: 'users#show'
match 'photos', to: 'photos#show', via: [:get, :post]# via: :all
root to: "home#index"
7 params
安全
params.require(:person).permit(:name,:age,..)
8 缓存
缓存html片段
俄罗斯套娃缓存 Russian Doll Caching
https://ruby-china.org/topics/21488
9 调试
bye_bug和 web_console
侵入式调试
byebug
c = continue
n = next
step
pry 可代替console