-
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
ユーザーの検索結果に、管理者でログインしたときだけそのユーザーの相談部屋へのリンクを表示 #4147
ユーザーの検索結果に、管理者でログインしたときだけそのユーザーの相談部屋へのリンクを表示 #4147
Conversation
ブランチ名に |
@haruguchi-yuma お疲れ様ですレビューお願いいたします。 |
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.
レビュー遅くなりました!数点コメントしたのでご確認ください:bow:
全体的なところで1点。
相談部屋のリンクが表示される、されないは重要なことだと思いますのでテストがあってもいいのかなぁ〜と思いました!
よろしくお願いします🙏
app/helpers/search_helper.rb
Outdated
def talk?(searchable) | ||
searchable.instance_of?(User) && Talk.find_by(user_id: searchable.id) | ||
end |
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.
おそらくtalk?
メソッドはboolean
を戻り値にしたいと思うんですが&&
の右辺まで評価が進むと相談部屋オブジェクトが戻り値になるのでちょっと驚きがある気がします!
こんな感じはどうでしょうか?という提案です。またSQL叩かなくて済むというメリットもあります。
def talk?
searchable.instance_of?(User) && searchable.talk.present?
end
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.
右辺まで評価が進むと相談部屋オブジェクトが戻り値になるのでちょっと驚きがある
確かにその通りですね🙏 修正しました。
app/helpers/search_helper.rb
Outdated
def talk_id(searchable) | ||
Talk.find_by(user_id: searchable.id).id | ||
end |
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.
Viewに関することというよりはインスタンスに依存するコードなのでモデルに書いた方がいい気がするのですが、自信はないです😅
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.
もしくは、現状talk_id
というメソッドを使うところが他になさそうなのでjbuilderの方に直接
if talk?(searchable) && display_talk?(searchable)
json.talk_id searchable.talk.id
end
と記述してもいいかもしれません。
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.
talk_id
というメソッド名がご指摘いただいたようなコードを読んでいてのひっかかりポイントになっているのかなと考え、メソッド名の変更で対応しました。
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.
@ot0m1
返事遅くなりました!
伝え方が悪くて申し訳ないです😅
メソッド名が引っかかっているというよりはhelper
メソッドは見た目の部分に関することを記述すると思うのでtalk_id
を取得するようなコード(SQLを叩くコード)はここに記述しない方がいいのでは?という疑問から発言しました。
2つ目のコメントはtalk_id
を返すメソッドにそこまで汎用性がなさそうなのでjbuiderの方に記述すればメソッドを定義しなくても済むのかなぁと思ってコメントさせてもらいました!
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.
User は talk というカラムを持っていないのでメソッドにして Talk.find_by(user_id: searchable.id).id
を実行しないといけないと思い込んでいた(そのため #4147 (comment) みたいなコメントをしている)ので、ご指摘の通りに修正いたしました。
モデルで belongs_to :user
、 has_one :talk, dependent: :destroy
という宣言が行われていたのを把握しておらず、ずれた方向でリファクタリングを進めてしまっておりました🙏
Merge branch 'main' into display-link-to-consultation-room-in-users-search-results
@haruguchi-yuma レビューありがとうございました🙏 |
@@ -39,4 +39,12 @@ def filtered_message(searchable) | |||
def comment_or_answer?(searchable) | |||
searchable.is_a?(Comment) || searchable.is_a?(Answer) | |||
end | |||
|
|||
def talk?(searchable) |
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.
対応するhelperのテストがあるといいかもです〜
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.
ヘルパーテストを追加するみたいな考えが全くありませんでした🙏
追加しました。
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.
追加分のテストについてはOKだと思います:data:
1点コメントしているのでご確認ください!😄
@haruguchi-yuma 諸々修正いたしました。何度もすいませんがレビューお願いいたします〜🙏 |
test/helpers/search_hepler.rb
Outdated
|
||
require 'test_helper' | ||
|
||
class SearchHelperTest < ActionView::TestCase |
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.
class SearchHelperTest < ActionView::TestCase | |
class SearchHelperTest < ActionView::TestCase |
Merge branch 'main' into display-link-to-consultation-room-in-users-search-results
@komagata |
test/helpers/search_hepler.rb
Outdated
require 'test_helper' | ||
|
||
class SearchHelperTest < ActionView::TestCase | ||
test 'does it return correct boolean value in talk' do |
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.
「talkかどうかを返す」みたいな内容でいいと思います〜。
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.
テスト名変更しました。
Merge branch 'main' into display-link-to-consultation-room-in-users-search-results
@komagata レビューいただいた点を修正しました。再レビューお願いいたします。 |
test/helpers/search_hepler.rb
Outdated
class SearchHelperTest < ActionView::TestCase | ||
test 'return whether talk' do | ||
user = users(:kimura) | ||
assert_equal true, talk?(user) |
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.
trueかどうかのチェックはassert
メソッドがいいと思います。
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.
アサーションの種類について全然把握していませんでした🙇♂️
Rails テスティングガイドを見て assert と assert_not を用いるのが良いことを理解しました。
@komagata 何度もレビューありがとうございます〜🙏 ご指摘いただいた点を修正いたしました。ご確認お願いいたします。 |
test/helpers/search_hepler.rb
Outdated
class SearchHelperTest < ActionView::TestCase | ||
test 'return whether talk' do | ||
user = users(:kimura) | ||
assert true, talk?(user) |
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.
assertは引数を一つとるはずです〜
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.
ドキュメントを理解できていませんでした😭修正しました。
@komagata 何度もレビューお手数おかけします🙏 再度レビューお願いいたします。 |
test/helpers/search_hepler.rb
Outdated
user = users(:kimura) | ||
assert talk?(user) | ||
|
||
user = users(:taikai3) | ||
assert_not talk?(user) |
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.
複数回使う必要がないのであれば代入せずこのようにするとスマートかもです〜
user = users(:kimura) | |
assert talk?(user) | |
user = users(:taikai3) | |
assert_not talk?(user) | |
assert talk?(users(:kimura)) | |
assert_not talk?(users(:taikai3)) |
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.
ご指摘の通り冗長な変数宣言だと思いましたので修正いたしました。
@komagata 再レビューお願いいたします🙏 |
test/system/searchables_test.rb
Outdated
@@ -135,4 +135,24 @@ class SearchablesTest < ApplicationSystemTestCase | |||
assert_text 'kimura' | |||
assert_no_text 'machida' | |||
end | |||
|
|||
test 'check that link to talk room is displayed properly' do |
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.
- 管理者で相談部屋へのリンクが表示される
- 管理者以外で相談部屋へのリンクが表示されない
こちらは二つのテストケースに分けた方がテストのタイトルと合わせてわかりやすいかもです〜
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.
確かに…🙏 分割しました。
@komagata 再レビューお願いいたします。 |
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.
確認しました、OKですー🙆♂️
ref: #4068
要件
ユーザーの検索結果に、管理者でログインしたときだけそのユーザーの相談部屋へのリンクを表示する。
画面イメージ
変更前
変更後
確認方法
display-link-to-consultation-room-in-users-search-results
ブランチをローカルに持ってくる(参考:https://qiita.com/great084/items/ad74dd064a2c2bc47cff )komagata
,machita
)であれば相談部屋を持っている全てのユーザーで相談部屋へのリンクが表示される