前言:知其然不知其所以然,勿要深究。
1.scope的使用,注意以下的几种用法
scope :by_question_id, ->(ids){ where(:id => ids) }
scope :by_category_code, ->(code){ where(:category_code => code) if code.present?}
scope :by_area_code, ->(code){ where("area_code like '#{code}%'") if code.present?}
scope :order_by_user_name , lambda{|name| joins(:user_expand).order("has_official desc").order("has_expert desc").order("nick") if name=="user_id" }
scope :by_user_id_and_question_id, ->(uid,qid){where("user_id = ? and question_id = ?",uid,qid)}
has_many :answers
has_many :question_ok_logs
belongs_to :user_expand,:foreign_key => "user_id",:primary_key => "user_id"
belongs_to :area,:foreign_key => "area_code",:primary_key => "area_code"
belongs_to :category,:foreign_key => "category_code",:primary_key => "id"
3.查询model中,某一列的最大值,
User.where(:name=> 'xxx').maximum('id')
Client.maximum("age")
4.controller中定义的方法名,最好不要超过5个单词
5..try的使用,不用担心变量是为nil时报错,不需要判断变量是否为nil,代码可以更简洁。如有值,返回值,无,则返回nil
ps:rails4 升级后,try不再能调用私有方法。
@person.try(:name)
6.eager_loadde 的用法,用来预加载对用的关联对象信息,以后调用的时候,不会再次去查询数据库。
answer = Answer.eager_load(:question).find(params[:aid])
如果使用此种写法,在类似
answer.question
这种调用方式,直接可以取到缓存的值,不会再次去查询
7.学会使用select,collect,map的用法。
[1,2,3,4,5].select { |num| num.even? } #=> [2, 4],返回的是一个符合条件的新数组
a = [ "a", "b", "c", "d" ]
a.map { |x| x + "!" } #=> ["a!", "b!", "c!", "d!"],返回的是条件组合的一个新数组
a #=> ["a", "b", "c", "d"],注意,a的值并没有改变,
collect的用法与map的用法类似
8.