首页 > 技术文章 > ruby select 方法,可用于先查询结果后,再次用条件限制

lmg-jie 2018-03-14 16:32 原文

1. 用于条件过滤

@works=DworkPro.all.order(:work_type)

@work_pro=@works.select{ |x| x.job_type == 7}

2. select 和find 的区别

arr = [1,2,3,4]

  arr.find{|i| i%2 == 0 }
#=>2
arr.select{|i| i%2 == 0}
#=>[2, 4]

find返回满足条件的第一条记录,而select返回满足条件的全部记录。 要分情况应用不同的方法,否则会产生bug。

3.  判断指定 字段 是否存在

login = DLoginMsg.find_by(:id => login_id)

@task_lines = DLogionTaskLine.where(:d_task_form_id => login.d_task_forms.pluck(:id))
.select{|x| x.long_login.present? }
.map { |x|  {  login_name: login.login_name,
      telphone: login.telphone,
      get_time: x.get_time.strftime("%Y-%m-%d %H:%M:%S"),
      long_login: x.long_login,
      lat_login: x.lat_login,
      d_task_form_id: x.d_task_form_id,
      unit_name: SRegionCodeInfo.find(yw_unit_id).unit_name,
      station_name: DTaskForm.find(x.d_task_form_id).present? ? DTaskForm.find(x.d_task_form_id).station_name : '',
      job_no: DTaskForm.find(x.d_task_form_id).job_no,
      title: DTaskForm.find(x.d_task_form_id).title }

   }

4. 只查询指定的字段

json.father_region_code SRegionCode.select(:id,:region_name).find_by(:id =>region_code.father_region_id)
 
返回结果:
father_region_code":{"id":1,"region_name":"河南"}}}
 

 

推荐阅读