Rails: Tab menülerde paginate işlemi

1 minute read

Tab menülerde paginate işlemini yapılandırırken karşılaştığım sorunlar:

İlk önce tablar arasında geçişlerde bir sıkıntı yaşadım. Bunu will_paginate‘in param_name parametresiyle şöyle hallettim.

@teachers = Teacher.paginate(page: params[:teachers_page], per_page: 10)
@students = Student.paginate(page: params[:students_page], per_page: 10)

<%= will_paginate @teachers, param_name: "teachers_page" %>
<%= will_paginate @students, param_name: "students_page" %>

Diğer bir sorun ise ilk tab dışındaki diğer tablarda paginate işlemiyle başka sayfalara geçiş yaptığım zaman (?pages=2) sistem sayfayı ilk tab’ın konumuna atıyordu.

Yani yapmak istediğim ama aslında olan tam da şu şekildeydi:

Bu sorunu da HTML5’in localStorage’ını kullanarak şu şekilde hallettim:

# GET /users/1
def show
  @user_activities_for_course_weeks = PublicActivity::Activity.includes(:trackable, :owner).where(owner_id: User.find(params[:id]), trackable_type: "CourseWeek").paginate(page: params[:course_weeks], per_page: 10)
  @user_activities_for_teachers = PublicActivity::Activity.includes(:trackable, :owner).where(owner_id: User.find(params[:id]), trackable_type: "Teacher").paginate(page: params[:teachers], per_page: 10)
end
<ul id="activityTab" class="nav nav-tabs">
  <li class="active"><%= link_to "Course Weeks", "#tab_week", id: "profile-tab", role: "tab", "data-toggle" => "tab" %></li>
  <li><%= link_to "Teachers", "#tab_teacher", role: "tab", id: "profile-tab", "data-toggle" => "tab" %></li>
</ul>
<div class="tab-content">
  <%= render "week_activities" %>
  <%= render "teacher_activities" %>
</div>
<div role="tabpanel" class="tab-pane fade active in" id="tab_week">
  <ul class="messages">
    <% @user_activities_for_course_weeks.each do |activity| %>
      <li>
        ...
      </li>
    <% end %>
  </ul>
  <%= will_paginate @user_activities_for_course_weeks, class: "apple_pagination", param_name: "course_weeks" %>
</div>
<div role="tabpanel" class="tab-pane fade" id="tab_teacher">
  <ul class="messages">
    <% @user_activities_for_teachers.each do |activity| %>
      <li style="list-style-type: none;">
        ...
      </li>
    <% end %>
  </ul>
  <%= will_paginate @user_activities_for_teachers, class: "apple_pagination", param_name: "teachers" %>
</div>
$('a[data-toggle="tab"]').on('show.bs.tab', function(e) {
  localStorage.setItem('activeTab', $(e.target).attr('href'));
});

var activeTab = localStorage.getItem('activeTab');

if (activeTab) {
  $('#activityTab a[href="' + activeTab + '"]').tab('show');
}

Farklı çözüm önerileriyle aydınlandığım vakit burayı güncelleyeceğim.

Ecmel Albayrak

Ecmel Albayrak

Subscribe

* indicates required

Intuit Mailchimp