/ / Kaminari i dodatkowe params - ruby-on-rails, ruby, paginacja, kaminari

Kaminari i dodatkowe params - ruby-on-rails, ruby, paginacja, kaminari

Rozejrzałem się dookoła i nie znajduję niczego, co mogłoby znaleźć odpowiedź. Myślę, że jest to dość wyjątkowy przypadek, więc nie jestem zaskoczony.

Mam stronę indeksu, na której pokazuję wszystkieprowadzi, ale mam 3 oddzielne sposoby jej wyświetlania: nierecenzowane, przejrzane, wszystkie. Aby to osiągnąć, używam strony current_page? pomocnik, dodaj:? unreviewed = true do adresu URL.

Nie działało to samo z siebie, gdy dodałem w kaminari do stronicowania params strony wydaje się to zepsuć i sprawić, że będzie to strona current_page? Nie mogę przeczytać dodatkowych params.

Jak mogę to naprawić, czy jest lepszy sposób na osiągnięcie tego celu?

Używa się Rails 4 i Kaminari 0.15.1

Kontroler:

def index
@leads = Lead.order(:id).page params[:page]
@reviewed_leads = Lead.where(reviewed: true).order(:id).page params[:page]
@unreviewed_leads = Lead.where(reviewed: nil).order(:id).page params[:page]
current_page_no = Lead.page
end

index.html.erb

         <tr>
<td colspan="7" style="text-align: center;">
<div class="pagination pagination-table">

<% if current_page?(controller: "leads", action: "index", unreviewed: "true") %>
<%= paginate @unreviewed_leads %>
<% elsif current_page?(controller: "leads", action: "index", reviewed: "true") %>
<%= paginate @reviewed_leads %>
<% else %>
<%= paginate @leads %>
<% end %>
</div>
</td>
</tr>

Zadziałało, gdy adres URL wyglądał następująco:

/closingloop/leads?unreviewed=true

w ten sposób strona current_page nie odczytuje go poprawnie i zawsze pokazuje zmienną instancji @leads

/closingloop/leads?page=2&unreviewed=true

jakakolwiek pomoc byłaby bardzo doceniana. Będę kontynuował próby, zaktualizuję to, co znajdę.

Odpowiedzi:

3 dla odpowiedzi № 1

Zmień działanie kontrolera na

def index
@leads = Lead.where(reviewed: params[:reviewed]).order(:id).page(params[:page])
end

W twoim widoku nie musisz sprawdzać bieżącej strony, tylko upewnij się, że przekazujesz wartość params[:reviewed]

<%= paginate @leads, params: { reviewed: params[:reviewed] } %>

AKTUALIZACJA

Jak podkreślono w komentarzach, nie ma to wpływu na pokazywanie mieszanych leadów. Można to osiągnąć, tworząc zakres

# lead model

def self.filter_by_reviewed_status(status)
case status
when nil     then scoped
when "true"  then where(reviewed: true)
when "false" then where(reviewed: false)
end
end

Następnie w kontrolerze użyj tego do uzyskania potencjalnych klientów

@leads = Lead
.filter_by_reviewed_status(params[:reviewed])
.order(:id)
.page(params[:page])

Pamiętaj, aby ustawić params[:reviewed] do prawdziwej, fałszywej lub zerowej (nie przechodzi w ogóle) w linkach, aby uzyskać leads potrzebujesz