2014-04-26 82 views
0

搜索查詢,我在我的模型這個小方法:凡與方法

def date 
    created_at.strftime('%d.%m.%Y') 
end 

現在我想用這種方法的幫助下進行搜索查詢:

@ebm_entry = @patient.ebm_entries.find(params[:id]) 
    @ebm_entries = @patient.ebm_entries.where(date: @ebm_entry.date) 

但是不知怎麼的.where(date: @ebm_entry.date) clausel不會工作,我得到這個錯誤:

ActiveRecord::StatementInvalid (PG::UndefinedColumn: FEHLER: Spalte ebm_entries 
.date existiert nicht 
LINE 1: ...tries" WHERE "ebm_entries"."patient_id" = $1 AND "ebm_entri... 

什麼我錯了嗎?由於

+0

它看起來像是從錯誤,表中'日期'列不存在。你能提供你的表格模式嗎? – Saurabh

+0

@saurabh是的更正它不存在! 'Date'是我模型中的一個方法!我認爲這是一個virtaul屬性? –

+0

這樣你的問題現在就解決了吧? – Saurabh

回答

2

對於以這種方式查詢,你可以在對應的活動記錄模式是這樣寫範圍:

@ebm_entries = @patient.ebm_entries.dated(@ebm_entry.date) 

scope :dated, lambda { |date| where(:created_at => date) } 

利用這一點,您可以按以下方式查詢Scope添加了一個用於檢索和查詢對象的類方法。範圍表示數據庫查詢的縮小範圍,例如在此例中爲where(:created_at => date)

Here是更詳細的範圍和它的使用rubyonrails頁面。

+0

現在感謝它的工作! –

0

對不起,但沒有「按虛擬屬性搜索」之類的東西:)您只能搜索真實的數據庫數據。

但是,您可以傳遞Date對象,並且activerecord會自動將其轉換爲數據庫日期字段。

所以這將是非常簡單的實現你想要什麼:

@ebm_entry = @patient.ebm_entries.find(params[:id]) 
@ebm_entries = @patient.ebm_entries.where(created_at: @ebm_entry.created_at) 

事實上,格式化的東西應該是一個視圖的事情,在數據庫不相關的數據。