2016-07-29 6 views
1

Ich habe eine Sicht, wodurch eine Liste von Diensten angezeigt wird. Innerhalb dieser Ansicht gibt es Sortierfunktionen wie Schaltflächen oben, die angeklickt werden können, um nur Datensätze anzuzeigen, die dieser Option entsprechen. Wenn Sie beispielsweise auf "Genehmigt" klicken, werden nur genehmigte Dienste angezeigt. Ich habe auch Tabellenspalten, die zum Sortieren anklickbar sind. So können Sie beispielsweise auf das erstellte Datum klicken, und die Tabelle zeigt die Datensätze aufsteigend oder absteigend nach Datum an.Sortieren und resort Datensätze mit der ersten Art noch angewendet

def index 

    @my_campaigns = Campaign.active.where(:operator_id => current_user.operator_id).joins(:partner).where("partners.deleted_at IS ?", nil).where("partners.parent_id NOT IN (?) OR partners.parent_id is null", @sla_test_ids) 

    @campaigns = @my_campaigns 

    if params[:search_link] 
    @campaigns = @campaigns.where(:status => params[:search_link]) 
    end 

    if params[:search] 
    @campaigns = @campaigns.where("campaigns.name ILIKE ? OR partners.company_name ILIKE ?", "%#{params[:search]}%", "%#{params[:search]}%") 
    end 

    if params[:sort] 
    @campaigns = @campaigns.order(sort_column + " " + sort_direction) 
    else 
    @campaigns = @campaigns 
    end 

    if params[:page] == "all" 
    @campaigns = @campaigns.order('campaigns.id DESC').page(1).per(@campaigns.count) # you can alhardcod' it 
    else 
    @campaigns = @campaigns.order('campaigns.id DESC').page(params[:page]||1) 
    end 

end 

Mein Problem ist, dass sagen, wenn ich die genehmigte Taste und nur zugelassene Datensätze ausgewählt gezeigt wurden, wenn ich nach Datum sortieren, so wäre es die Datenbank erneut abfragen und alle Datensätze zurück, anstatt nur genehmigt Aufzeichnungen.

Kann jemand beraten, wie ich die neuen Parameter mit den Parametern kombinieren kann, die bereits auf die Ansicht angewendet werden.

+0

Sie müssten die vorhandenen Parameter in den Link eingeben. Wenn Sie also auf den Link klicken, stehen Ihnen diese Parameter zur Verfügung. –

+0

Statt 'if ... elseif', tun Sie zwei' if's. Wenn a: search_link bereitgestellt wird, führe den Aufruf wo aus. Wenn a: sort angegeben ist, rufen Sie die Reihenfolge auf. – Leito

+0

@ j-dexx Wie übergeben Sie die vorhandenen Parameter in der Verknüpfung? – EamonnMcElroy

Antwort

0

ActiveRecord-Beziehungen sind verkettet, sodass Sie alle Ihre Bedingungen nacheinander verketten können. Zum Beispiel:

@campaigns = @my_campaigns 

if params[:search_link] 
    @campaigns = @campaigns.includes(:partner).where(status: params[:search_link]) 
end 

if params[:sort] 
    @campaigns = @campaigns.order(sort_column + " " + sort_direction) 
end 

Es ist billig, weil es nur die Abfragekonstruktion ist. Die gesamte Abfrage wird erst später ausgeführt, wenn Sie in der Ansicht @campaigns verwenden.

+0

Hey. Es gibt immer noch die vollständige Liste der Datensätze zurück und nicht meine beabsichtigte Funktionalität, bei der eine Teilmenge zurückgegeben wird, die dann nach Datum sortiert wird. Ich werde meine Frage aktualisieren, um ein bisschen mehr Code aufzunehmen. Es könnte klären / – EamonnMcElroy

Verwandte Themen