Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

コース毎の参考書籍一覧ページを非Vue化した #8158

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

ai-24
Copy link
Contributor

@ai-24 ai-24 commented Oct 27, 2024

Issue

概要

Vueで実装されていた/courses/:course_id/books をRailsでの実装に書き換えました。

変更確認方法

  1. chore/change-courses-id-books-page-from-vue-to-htmlをローカルに取り込む
  2. bin/setupを実行
  3. http://localhost:3000/courseskomagataさんでアクセスし、Railsエンジニアコースをクリック
  4. Railsエンジニアコースのプラクティスが表示されるので、上部タブの書籍をクリック
スクリーンショット 2024-10-27 22 08 17
  1. Railsエンジニアコースの参考書籍ページが、Vueで実装していた時と変わらず表示されているか確認する
  2. 書籍ページ内の必読タブをクリックし、必読書籍も同じようにVueで実装していた時と変わらず表示されているか確認する
スクリーンショット 2024-10-27 22 16 56
  1. スクール生(kimuraやhajimeなど)でログインし5 6のページ内で参考書籍の編集ボタンが表示されないことを確認する

Screenshot

画面上の変更はありません。

@ai-24 ai-24 self-assigned this Oct 27, 2024
@ai-24
Copy link
Contributor Author

ai-24 commented Oct 28, 2024

@ham-cap
お疲れ様です!
お忙しいところ申し訳ありませんが、お手隙の際にこちらのレビューをお願いできますでしょうか?
ご多忙かと思いますので、難しければ遠慮なくおっしゃってください!
よろしくお願いいたします🙇‍♀️

@ham-cap
Copy link
Contributor

ham-cap commented Oct 29, 2024

@ai-24
お疲れさまです!
レビュー依頼ありがとうございます!
今週は少しバタバタするのですが、レビューは是非やらせていただきたいので1週間ほどお時間いただければ幸いです🙏
もしお急ぎの場合はお知らせください!

@ai-24
Copy link
Contributor Author

ai-24 commented Oct 29, 2024

@ham-cap
ありがとうございます!
急ぎませんのでよろしくお願いいたします🙇‍♀️

@ai-24 ai-24 requested a review from ham-cap October 29, 2024 22:01
Copy link
Contributor

@ham-cap ham-cap left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ai-24
大変お待たせしました🙇‍♂️
いくつか気になった点をコメントさせていただきましたのでご確認いただければと思います〜🙏

li.tag-links__item
= link_to practice.title, practice_path(practice), class: 'tag-links__item-link'
hr.a-border-tint
- if current_user.admin? || current_user.mentor?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

管理者かメンターでログインしていることを確認するメソッドがconcernsにあるので、そちらを使用するほうがいいかもしれません👀
以下、当該メソッド定義場所のリンクです。
https://github.com/fjordllc/bootcamp/blob/main/app/controllers/concerns/authentication/login_helpers.rb#L26

| 必読
= link_to book.page_url, class: 'card-books-item__title-link', target: '_blank', rel: 'noopener'
span.card-books-item__title-label
= book.title
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Slimを使用しているので、テキストはなるべく|を使用してあげる方がいいかもしれません👀

span.card-books-item__title-label
  | #{book.title}

= book.title
.card-books-item__row
p.card-books-item__price
= "#{book.price.to_s(:delimited)}円(税込)"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こちらも上のbook.titleと同様に|のほうがいいような気がします〜

| #{book.price.to_s(:delimited)}円(税込)

.card-books-item__description
.a-short-text
p
= safe_join(book.description.split(/\n/), tag.br)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pを使用していてクラス名も特にないので、改行せずにそのまま文字列として渡してしまってもいいように思いますが、好みの問題かもしれないので判断はお任せします🙌

p #{safe_join(book.description.split(/\n/), tag.br)}

@@ -3,5 +3,6 @@
class Courses::BooksController < ApplicationController
def index
@course = Course.find(params[:course_id])
@books = Book.filtered_books(params[:status], @course)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BookやCourseに定義されたメソッドも含めて、@booksを取得するロジックが少し複雑になってしまっているようなので、モデル内のメソッドではなくActiveRecordの関連付けを使ってコントローラー内で完結したほうがいいような気がします👀
例えばなのですが、以下のような感じでparams[:status]の値を先に判定してしまい、コースに紐づく書籍の取得はテーブルを連結して一気にやってしまうというのはいかがでしょうか?🤔

  def index
    @course = Course.find(params[:course_id])
    must_read_status = params[:status] == 'mustread' ? { practices_books: { must_read: true } } : {}
    @books = Book.joins(practices: { categories: :courses_categories }, practices_books: :practice)
                 .where(courses_categories: { course_id: @course.id })
                 .where(must_read_status)
                 .distinct
                 .order(updated_at: :desc, id: :desc)
  end

これであれば、BookとCourseのモデルをいじらなくてもコースに紐づいた書籍の取得はできそうです。
今回の場合BookからCourseまでを繋げる関連付けが複雑なのと、自分もActiveRecordの扱いが上手いわけではないのであまり自信はないのですが、コードの見通しは改善できると思うので、一つの提案としてご検討いただければ幸いです🙏
もし仕様やモデル間の関連付けについて私の理解に誤りがあれば遠慮なくご指摘ください〜🙌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants