2016-07-07 10 views
0

従業員テーブルのインデックスページには - id, due_date, employee_full_name, company_nameの4つの検索フィールドがあります。ここで外部キーを使用して親テーブルと一緒にテーブルフィールドを検索

は、search_parametersに、私は、検索パラメータが

search_parameters = 
    {:id => params[:id], :due_date => params[:due_date], 
     :employee_full_name => params[:employee_full_name]} 
    .select { |key,value| value.present?} 

存在している場合、私は、Employeeテーブルの列を探していますし、それはここで私は「COMPANY_NAMEを探しています

@employees_search = Employee 
    .where(search_parameters, params[:id].to_i, params[:due_date], 
    params[:employee_full_name]) 

を正常に動作しているチェックしています'を外部テーブルとしてcompany_idのCompanyテーブルから取得します。これもうまくいきます。

@company_search = Employee 
    .where(company_id: Company 
    .where(company_name: params[:company_name])) 

しかし、上記の2つのクエリを組み合わせて、4つのフィールドをすべて検索できるようにする必要があります。やや下のコードのように。

@employees_search = Employee 
    .where(search_parameters, params[:id].to_i, params[:due_date], 
    params[:employee_full_name], 
    company_id: Company 
     .where(company_name: params[:company_name])) 

上記のクエリは、結果を結合したものではなく、従業員テーブルの検索結果を提供するだけです。クエリで何が問題になっていますか?

答えて

0

@employees_search = Employee 
      .where("id = ? or due_date = ? or employee_full_name = ? 
      or company_id in (?)", params[:id],params[:due_date],params[:employee_full_name], 
      Company.where('company_name = ?',params[:company_name]).pluck(:id)) 

'= ?'構文を使用して、Employeeテーブル内のすべてのフィールドを検索してのcompany_idに来るときがあるかもしれない、すべてのフィールドを与えることによって、またはクエリを使用して、アクティブレコードクエリを使用して、この文字列で検索してください単一の会社でも同じ名前を持つ複数の企業はin (?)の構文を使用してください。 これは、すべての従業員にparamsの値を与え、その会社に属する従業員も含めます。

これにより、問題が解決する場合があります。

0

@ sravanの回答を使用して、私は完全に機能した次のクエリに到着しました。

search_parameters = 
    {:id => params[:id], :due_date => params[:due_date], 
    :employee_full_name => params[:employee_full_name], 
    :company_id => Company 
     .where('company_name = ?', params[:company_name]) 
     .pluck(:id)} 
    .select { |key,value| value.present? } 

@employees_search = Employee 
    .where(search_parameters, params[:id].to_i, params[:due_date], 
    params[:employee_full_name],:company_id => Company 
      .where('company_name = ?',params[:company]) 
      .pluck(:id) 
     ) 
関連する問題