-
Notifications
You must be signed in to change notification settings - Fork 71
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
base: main
Are you sure you want to change the base?
コース毎の参考書籍一覧ページを非Vue化した #8158
Conversation
@ham-cap |
@ai-24 |
@ham-cap |
There was a problem hiding this 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? |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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)}円(税込)" |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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の扱いが上手いわけではないのであまり自信はないのですが、コードの見通しは改善できると思うので、一つの提案としてご検討いただければ幸いです🙏
もし仕様やモデル間の関連付けについて私の理解に誤りがあれば遠慮なくご指摘ください〜🙌
Issue
概要
Vueで実装されていた
/courses/:course_id/books
をRailsでの実装に書き換えました。変更確認方法
chore/change-courses-id-books-page-from-vue-to-html
をローカルに取り込むbin/setup
を実行http://localhost:3000/courses
にkomagataさん
でアクセスし、Railsエンジニアコースをクリック5
6
のページ内で参考書籍の編集ボタンが表示されないことを確認するScreenshot
画面上の変更はありません。