定义要在activerecord

时间:2016-04-27 06:49:26

标签: ruby-on-rails activerecord

就是这种情况。

我无法控制的医院数据库,最多200列的表格......大栏目。我知道我可以使用.select(:col1, :col2)来淡化sql结果集,但是在关系中.... Patient.select(:full_name).find[a,b,c,d.....].include(:visits) ...其中Visits有168列,我只需要住院病人和门诊病人列,在日志上查看Select *,只是伤害,并且需要永远加载。

有没有办法在课堂上设置,要在模型中包含哪些列?

说出类似的话(我只是在做这件事)

class Foo < ActiveRecord::Base
  select_columns = [:id, :inpatient_date, :outpatient_date]
  ...
end

那么对数据库进行的任何提取只使用select语句中的那些列吗?

2 个答案:

答案 0 :(得分:1)

您可以使用默认范围:

class Foo < ActiveRecord::Base
  default_scope: -> { select(:id, :inpatient_date, :outpatient_date) }
  ...
end

请注意,这只会影响返回对象集合的查询,例如where等。引用像Foo.find()这样的单个对象时,所有列仍然可用。

答案 1 :(得分:1)

您可以使用plug :client_error_plug when action in [:show, ...] 方法。

类似的东西:

pluck

这将返回如下内容:

  

SELECT patients.id,patients.name,visits.inpatient_date,visits.outpatient_date FROM&#34; patients&#34; LEFT OUTER JOIN&#34;访问&#34; ON&#34;患者&#34;。&#34; id&#34; =&#34;访问&#34;。&#34; patient_id&#34;

有关Patient.includes(:visits).pluck("patients.id, patients.name, visits.inpatient_date, visits.outpatient_date") 方法的更多信息,请访问:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck