Railsのページネーションで、ページ切り替え後に動きをつける
受付中
回答 0
投稿
- 評価
- クリップ 0
- VIEW 1,033
以前も質問させていただきましたが、質問が分かりづらかったため再度投稿です。
現在以下のようなCSSだけでタブ切り替えの実装をしています。
ところが、ページネーション(kaminari)を使ってタブごとにページャーをつけてやると、二番目のタブでページネーションでページが切り替わるたびに一番目のタブにもどってしまいます。(render?redirect?されるため)
そこで、選択されているタブをページが切り替わっても保持する方法や、ページネーション切り替わるときは、切り替わった後に選択しているタブを選択し直すなどの対策が必要だと感じました。
また、ページネーションは2つのモデルを扱っているため、login_logとworking_hourで別々のクエリが発行されるようになってます。
jQueryの知識が乏しいため、ヒントやアドバイス(そもそもタブの実装方法を変えたほうがいいなど)を教えていただけたら助かります。
よろしくお願いいたします。
%div{class: "tabs"}
%input{id: "working_hours", type: "radio" ,name: "tab_item", checked: "checked"}
%label{class: "tab_item", for: "working_hours"} 作業時間
%input{id: "login_logs", type: "radio" ,name: "tab_item"}
%label{class: "tab_item", for: "login_logs"} ログ
%div{class: "tab_content", id: "working_hours_content"}
%div{class: "tab_content_description"}
%table{style:"border-collapse:collapse;"}
%thead
%tr
%th ID
%th 名前
%th 作業開始時間
%tbody
- @working_hours.each do |working_hour|
%tr
%td= working_hour.user_id
%td= "#{working_hour.user.realname}"
%td= "#{working_hour.start_datetime.to_s(:admin_view)}"
= paginate(@working_hours, param_name: 'working_hours_page')
%div{class: "tab_content", id: "login_logs_content"}
%div{class: "tab_content_description"}
%table{style:"border-collapse:collapse;"}
%thead
%tr
%th ID
%th 名前
%th IPアドレス
%tbody
- @login_logs.each do |login_log|
%tr
%td= login_log.user_id
%td= login_log.user.realname
%td= login_log.login_from_ip_address
= paginate(@login_logs, param_name:'login_logs_page')
/*タブ切り替え全体のスタイル*/
.tabs {
margin-top: 50px;
padding-bottom: 40px;
background-color: #fff;
width: 720px;
}
/*1つ1つのタブのスタイル*/
.tab_item {
width: calc(100%/2); /*ここの分母をタブの数に合わせる*/
height: 40px;
border-bottom: 3px solid #f1c11b;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
background-color: #d9d9d9;
line-height: 40px;
font-size: 16px;
text-align: center;
color: #565656;
display: block;
float: left;
text-align: center;
font-weight: bold;
transition: all 0.2s ease;
}
.tab_item:hover {
opacity: 0.75;
}
/*ラジオボタンを全て消す*/
input[name="tab_item"] {
display: none;
}
/*タブ切り替えの中身のスタイル*/
.tab_content {
display: none;
padding: 20px;
clear: both;
overflow: scroll;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
height: 400px;
}
.tab_content_description {
padding: 20px 0px 10px 0px;
}
/*選択されているタブのコンテンツのみを表示*/
#working_hours:checked ~ #working_hours_content,
#login_logs:checked ~ #login_logs_content,
{
display: block;
}
/*選択されているタブのスタイルを変える*/
.tabs input:checked + .tab_item {
background-color: #f1c11b;
color: #fff;
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる