2016-07-07 6 views
0

Ich habe 4 Suchfelder in meiner Indexseite der Mitarbeiter Tabelle - id, due_date, employee_full_name, company_name.Suche Tabelle Felder zusammen mit übergeordneten Tabelle mit Fremdschlüssel

Hier in search_parameters, ich überprüfen, ob Suchparameter

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

vorhanden sind ich die Spalten der Tabelle Employee bin auf der Suche, und es funktioniert gut

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

Hier suche ich ‚company_name 'aus Unternehmenstabelle mit company_id als Fremdschlüssel. Dies funktioniert auch gut.

Aber ich muss die obigen 2 Abfragen kombinieren, damit Benutzer alle 4 Felder zusammen suchen können. Ein bisschen wie der folgende Code.

Die obige Abfrage gibt nur Suchergebnis der Mitarbeiter Tabelle und nicht das kombinierte Ergebnis. Was ist falsch an den Abfragen?

Antwort

0

Diese Abfrage den aktiven Datensatz abfragen oder Abfrage verwenden, indem Sie alle Felder, geben

@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)) 

Suche alle Felder in der Employee-Tabelle mit dem '= ?' Syntax und wenn sie auf die company_id kommen kann es mehrere Unternehmen mit dem gleichen Namen verwenden also in (?) Syntax, auch wenn es für einzelne Firma funktioniert. Dies gibt Ihnen alle Mitarbeiter mit den Werten aus den Params und auch die Mitarbeiter, die zu diesem Unternehmen gehören.

Dies kann Ihr Problem lösen.

0

mit @sravan Antwort, kam ich zu folgenden Abfrage, die perfekt funktionierte.

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) 
     ) 
Verwandte Themen