2016-05-24 28 views
0

正しい構文と演算子を見つけて、レコードがIDがアレイに格納されているIDと同じであるかどうかを調べる際に問題があります。 has any?の機能などはありますか?レコードがレコード内のIDと同じIDを持つ場合は、

@problem = Remedy.where(["LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase]).pluck(:id) 

@pretreatments = Treatment.joins(:remedies_treatment).where(:remedies_treatment_remedy_id == @problem) 

私は、コードを更新しました:私は今取得していますエラーがあるしかし

ids = Remedy.where(["LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase]).pluck(:id) 

@pretreatments = Treatment.joins(:remedies_treatments).where(remedies_treatments: { remedy_id: @problem }) 

のActiveRecordを使用して
 SELECT "treatments".* FROM "treatments" INNER JOIN "remedies_treatments" ON "remedies_treatments"."treatment_id" = "treatments"."id" WHERE "remedies_treatment"."remedy_id" IS NULL 
Completed 500 Internal Server Error in 157ms (ActiveRecord: 17.0ms) 

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "remedies_treatment" 
LINE 1: ...atments"."treatment_id" = "treatments"."id" WHERE "remedies_... 
                  ^
: SELECT "treatments".* FROM "treatments" INNER JOIN "remedies_treatments" ON "remedies_treatments"."treatment_id" = "treatments"."id" WHERE "remedies_treatment"."remedy_id" IS NULL): 
    app/controllers/treatments_controller.rb:116:in `index' 



ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "remedies_treatment" 
LINE 1: ...atments"."treatment_id" = "treatments"."id" WHERE "remedies_... 
                  ^
: SELECT "treatments".* FROM "treatments" INNER JOIN "remedies_treatments" ON "remedies_treatments"."treatment_id" = "treatments"."id" WHERE "remedies_treatment"."remedy_id" IS NULL 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec' 
+0

I:あなたはTreatmentに次の関係を持つべきですどんなことがあってもそれが必要です。 –

+0

モデル間の関係を投稿しないでください。いくつかの結合で解決できるようです。 – lusketeer

+0

自分のコードですか?変数 'remedies_treatment_remedy_id'が' @ problem'に格納されている値のいずれかを持つすべてのTreatmentsを選択しようとしています。 –

答えて

0

class Treatment 
    has_many :remedies_treatments 
end 
+0

これはうまくいくと思いましたが、コンソールでこのエラーが発生しました - 'ActiveRecord :: StatementInvalid(PG :: UndefinedTable:ERROR:テーブル" remedies_treatment "のためのFROM-clauseエントリがありません) LINE 1:... atments"。 "treatment_id "="治療 "" ID "WHERE" remedies _... " –

+0

どのような種類のエラーログ、コンソールエラーログ全体を送ることができますか? –

+0

テーブルは複数ですが、 -clause entry? ' - help btw –

0

、データベースからレコードを一致を検索することができます。

@problem = Remedy.where(["LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase]).pluck(:id) 
@pretreatments = Treatment.joins(:remedies_treatment).where(:remedies_treatment_remedy_id: @problem) 

remedies_treatment_remedy_id@problemのいずれかの値が含まれているレコードを検索するように指定して、where句にHashの構文を使用します。

ids = Remedy.where(["LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase]).pluck(:id) 

Treatment.joins(:remedies_treatments).where(remedies_treatments: { remedy_id: ids }) 

:あなたはIDと一致するので、リストを取得し、次のクエリでそれを使用したいので

+0

マイケルに答えを書く時間をとってくれてありがとう。しかし、私は真偽を返すか価値の位置を返そうとはしていません。変数 'remedies_treatment_remedy_id'に' @ problem'配列の値のいずれかが含まれているすべてのレコードを返そうとしています。 –

+0

ActiveRecord検索オプションも追加しました。あなたの例が示したように、あなたが言ったように配列から、またはデータベースから結果を望むかどうかは不明でした。私はオプションとして両方を含んでいます。 –

関連する問題