2017-01-24 29 views
1

我一直使用一種簡單的搜索方法來實現一個應用程序使用的幾個部分的搜索功能。方法和控制器索引操作看起來像這樣。Rails應用程序:我如何使用簡單的搜索方法搜索相關模型?

索引操作(participants_controller.rb)

def index if params[:search] @participants = Participant.search(params[:search]) else @participants = Participant.all end end

參與者模型(participant.rb)

def self.search(terms) if terms where("email ILIKE ?", "%#{terms}%") end end

遇到的問題IM是,我不僅需要通過電子郵件搜索(這是現在如何設置self.search方法。)但是我也需要通過名和姓(f_name,l_name)進行搜索。但此信息位於名爲ParticipantDetail的關聯模型中。

香港專業教育學院嘗試了以下但我得到一個「沒有方法participant_detail」錯誤

def index if params[:search] @participants = Participant.participant_detail.search(params[:search]) else @participants = Participant.all end end 香港專業教育學院還試圖尋找這樣的...

def index if params[:search] @participants = ParticipantDetail.search(params[:search]) else @participants = Participant.all end end

但其實這是沒有好,因爲它只會顯示關聯的記錄,而不會顯示歸屬的記錄(父)。

任何幫助將不勝感激。

回答

1

假設ParticipantDetail belongs_to :participant,並Participant has_one :participant_detail,在@ participants.each使用INNER JOIN

Participant 
    .select('participants.*') 
    .select('participant_details.f_name, participant_details.l_name') 
    .joins(:participant_details) 
    .where('participants.email ILIKE :search OR participant_details.f_name ILIKE :search OR participant_details.l_name ILIKE :search', search: terms) 
+0

我得到的第一選擇線 私有方法'選擇」呼籲「the_term_i以下錯誤輸入「:字符串 – Verty00

+0

'select'不是私有方法。確保你在'Participant'上調用它,它需要是一個ActiveRecord模型(不是普通的ruby類) – Tallboy

+0

我錯誤地實現了你的解決方案。我完全按照你的想法嘗試過,現在我得到了... 現在我得到 無法加入「參與者」到名爲'participant_details'的關聯;也許你拼錯了嗎? 我現在扮演與拼寫和多個與它似乎沒有關係。我仍然得到這個錯誤。 :/ – Verty00

1

在你search方法,你可以添加以下內容:

joins(:participant_detail).where("participant_detail.f_name ILIKE :search OR participant_detail.l_name ILIKE :search OR email ILIKE :search", :search => "%#{terms}%")

,並使用@participants = Participant.search(params[:search])調用它。

+0

做的觀點我碰到下面的錯誤 'code' PG :: UndefinedTable的行:錯誤:缺少FROM表「參與者」的條目條目 LINE 1:... ls「。」participant_id「=」參與者「。」id「WHERE(參與者... ^ :SELECT」加入「participant_details」ON「participant_details」。「」participant_id「=」參與者「。」我d「WHERE(participant_detail.f_name ILIKE'%kiana%'OR participant_detail.l_name ILIKE'%kiana%'或電子郵件ILIKE'%kiana%')'code' – Verty00

+0

你能發表視圖代碼嗎? – Shannon

+0

'code'

<% @participants.each do |participant| %> <%= render 'participants/participant_card', :participant => participant %> <% end %>
'code' 我對格式化表示抱歉。 IM努力弄清楚這個迷你降價徵求意見 – Verty00

相關問題