就是这种情况。
我无法控制的医院数据库,最多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语句中的那些列吗?
答案 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