2016-04-27 63 views
1

這是情況。定義在活動記錄的模型級別獲取哪些列

我不能控制的醫院數據庫,最多有200列的表格......大列。我知道我可以使用.select(:col1, :col2)減少sql結果集,但在一個關係.... Patient.select(:full_name).find[a,b,c,d.....].include(:visits) ...其中訪問有168列,我只需要住院和門診列,看日誌上的Select *,只是傷害,並且需要永久加載。

有沒有辦法在類中設置,在模型中包含哪些列?

這樣說(我只是做這件事)

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

所以,任何取指令完成對數據庫的select語句只使用那些列?

回答

1

您可以使用默認範圍:

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

注意,這隻會影響返回對象的集合查詢,像where等引用一個對象一樣Foo.find()時,所有列將仍然可用。

1

您可以使用pluck方法。

喜歡的東西:

Patient.includes(:visits).pluck("patients.id, patients.name, visits.inpatient_date, visits.outpatient_date") 

這將返回類似:

SELECT patients.id,patients.name,visits.inpatient_date,visits.outpatient_date FROM 「患者」 LEFT OUTER JOIN「訪問「ON」患者「。」id「=」訪問「。」patient_id「

更多關於pluck方法的信息,可以在這裏找到:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

+0

試過...它返回一個數組。我仍然需要一個模型。謝謝。 –

相關問題