前提・実現したいこと
今、RailsとJavaScriptを用いてCtoCで旅行の案内ができる人と案内してほしい人をマッチングさせるアプリを制作しておりまして、
旅行の案内をする人をツアーキャスト、旅行の案内を受ける人をツアーゲストと定義しています。
ユーザーは、ツアーキャストとしてもツアーゲストとしても投稿することができ、その投稿に対して他のユーザーが申し込むことができます。
今実現したいことは、そのアプリのマイページで、自分が投稿した投稿と申し込んだ投稿をタブの切り替えで見られるようにすることです。
ここでは、自分が投稿した投稿を@giving_post_○s
、申し込んだ投稿を@taking_post_○s
と定義しています。
また、○の部分にはツアーゲストの投稿の場合g
が、ツアーキャストの投稿の場合はc
が入ります。
画像のように左側に「投稿一覧」「申込済み」、
右側の上部に「ツアーゲストの投稿」「ツアーキャストの投稿」というタブをつくりました。
例えば「申込済み」と「ツアーキャストの投稿」のタブをクリックすると、
申込済みの投稿の中でツアーキャストの投稿のみ表示されるようにしたいです。
実際にコードを書いてみたところ、投稿一覧はツアーゲストとツアーキャスト両方見られるのですが、
申込済みのツアーキャストの投稿が表示されません。
(そもそも表示させる投稿がない場合、「投稿がありません」と表示されるようにしているので、
うまく実装できていれば何も表示されないということはないはずです)
また、一度申込済みのツアーキャストの投稿をクリックすると申込済みのツアーゲストも表示されなくなってしまいます。
こちらの原因と解決方法を教えていただけないでしょうか?
該当のソースコード
▼views/users/show.html.haml
haml
1.Mypage_lower 2 - if user_signed_in? && @user.id == current_user.id 3 .Mypage_lower__Btns 4 = link_to "投稿一覧", "#", class: "Post_type_btn Active1" 5 = link_to "申込済み", "#", class: "Post_type_btn" 6 .User_page_tabs 7 = link_to "ツアーゲストの投稿", "#", class: "User_page_tab Active2" 8 = link_to "ツアーキャストの投稿", "#", class: "User_page_tab" 9 10 11 .Mypage_lower__Content.Show1 12 .User_posts.Show2 13 - if @giving_post_gs.empty? 14 .Empty 投稿がありません 15 - else 16 .Post_index 17 - @giving_post_gs.each do |post| 18 = render partial: "posts_g/post", locals: { post: post } 19 .User_posts 20 - if @giving_post_cs.empty? 21 .Empty 投稿がありません 22 - else 23 .Post_index 24 - @giving_post_cs.each do |post| 25 = render partial: "posts_c/post", locals: { post: post } 26 27 .Mypage_lower__Content 28 .User_posts.Show2 29 - if @taking_post_gs.empty? 30 .Empty 投稿がありません 31 - else 32 .Post_index 33 - @taking_post_gs.each do |post| 34 = render partial: "posts_g/post", locals: { post: post } 35 .User_posts 36 - if @taking_post_cs.empty? 37 .Empty 投稿がありません 38 - else 39 .Post_index 40 - @taking_post_cs.each do |post| 41 = render partial: "posts_c/post", locals: { post: post }
▼user.js
js
1$(function() { 2 let btns = $(".Post_type_btn"); 3 4 function btnSwitch() { 5 $(".Active1").removeClass("Active1"); 6 $(this).addClass("Active1"); 7 const index = btns.index(this); 8 $(".Mypage_lower__Content").removeClass("Show1").eq(index).addClass("Show1"); 9 } 10 btns.click(btnSwitch); 11}); 12 13$(function() { 14 let tabs = $(".User_page_tab"); 15 16 function tabSwitch() { 17 $(".Active2").removeClass("Active2"); 18 $(this).addClass("Active2"); 19 const index = tabs.index(this); 20 $(".User_posts").removeClass("Show2").eq(index).addClass("Show2"); 21 } 22 tabs.click(tabSwitch); 23});
▼user.scss
.Mypage_lower { position: relative; &__Btns { position: absolute; top: 50px; left: -120px; .Post_type_btn { color: gray; font-weight: bold; margin-bottom: 30px; display: block; } .Active1 { color: $orange1; } } .User_page_tabs { width: 880px; display: flex; justify-content: space-around; margin: 0 auto; margin-bottom: 15px; .User_page_tab { height: 33px; width: 170px; text-align: center; font-weight: bold; color: gray; } .Active2 { color: $orange1; border-bottom: solid 2px $orange1; } } .Mypage_lower__Content { display: none; .User_posts { display: none; } .Show2 { display: block; } } .Show1 { display: block; } }
回答1件
あなたの回答
tips
プレビュー