私は単純な検索方法を使用して、アプリのいくつかの部分に検索機能を実装しています。メソッドとコントローラのインデックスアクションは、このようになります。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
方法で
最初の選択行で次のエラーが表示されます "the_term_i入力された ":文字列 – Verty00
' select'はプライベートメソッドではありません。あなたがActiveRecordモデル(普通のルビークラスでなくてはならない)でなければならない 'Participant'で呼んでいることを確認してください。 – Tallboy
私はあなたのソリューションを間違って実装しました。私はあなたがそれを持っているのとまったく同じように試しましたが、今私は... 今すぐ取得する 'participant_details'という名前のアソシエーションに '参加者'を参加できません。おそらくあなたはそれを間違って綴ったでしょうか? Iveは綴りと複数で演奏していて、それは問題ではないようです。私はまだこのエラーが発生します。 :/ – Verty00