2017-01-24 10 views
1

私は単純な検索方法を使用して、アプリのいくつかの部分に検索機能を実装しています。メソッドとコントローラのインデックスアクションは、このようになります。Rails App:簡単な検索方法を使用して関連するモデルを検索するにはどうすればよいですか?

indexアクション(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

た問題イム私は電子メールではないだけを検索する必要があるということです(これは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

を取得しかし、これは実際にはそれがないために良いではありません関連するレコードのみを持ち、belongsed_to(親)レコードは持ちません。

ご協力いただければ幸いです。

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])を使用します。あなたは次のように追加することができ、あなたのsearch方法で

答えて

1
ParticipantDetail belongs_to :participantを仮定

、およびParticipant has_one :participant_detail、私は次のエラー `code` PG :: UndefinedTableを取得し、ビューの行を行うの@ 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'はプライベートメソッドではありません。あなたがActiveRecordモデル(普通のルビークラスでなくてはならない)でなければならない 'Participant'で呼んでいることを確認してください。 – Tallboy

+0

私はあなたのソリューションを間違って実装しました。私はあなたがそれを持っているのとまったく同じように試しましたが、今私は... 今すぐ取得する 'participant_details'という名前のアソシエーションに '参加者'を参加できません。おそらくあなたはそれを間違って綴ったでしょうか? Iveは綴りと複数で演奏していて、それは問題ではないようです。私はまだこのエラーが発生します。 :/ – Verty00

1

。 ERROR:

+0

を使用することから行方不明"participant_detail"テーブルの項目を入力します。 ^ :SELECT "参加者" INNER(参加者から "参加者") ""LINE 1: JOIN "participant_details" ON "participant_details"。 "participant_id" = "参加者"。 "i 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' 私はフォーマットをお詫び申し上げます。私はこのコメントのミニマークダウンを理解するのに苦労しています – Verty00

関連する問題