我一直在使用简单的搜索方法为应用程序的几个部分实现搜索功能。方法和控制器索引操作如下所示。
索引操作(participant_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
我遇到的问题是我不仅需要通过电子邮件进行搜索(现在是如何设置self.search方法的。)但我还需要按名字和姓氏(f_name,l_name)进行搜索。但是此信息位于名为ParticipantDetail的关联模型中。
我尝试了以下但是我得到了一个没有方法参与者_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
但这实际上并不好,因为它只会显示相关记录而不会显示belowned_to(父)记录。
任何帮助将不胜感激。
答案 0 :(得分:2)
假设ParticipantDetail belongs_to :participant
和Participant has_one :participant_detail
,请使用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)
答案 1 :(得分: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])
来调用它。