-
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
提出物一覧のページの各タブの並びを昇順にした #4399
提出物一覧のページの各タブの並びを昇順にした #4399
Conversation
2ff9fa5
to
01829c6
Compare
app/models/product.rb
Outdated
scope :order_for_not_wip_list_descinding, -> { order(published_at: :desc, id: :desc) } | ||
scope :order_for_not_wip_list_ascending, -> { order(published_at: :asc, id: :asc) } |
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.
descinding
はdescinding
とわかるように、それに対応させてascending
はascending
とわかるように命名しました。
id
は昇順にするか降順にするか迷いましたが、メソッド名と対応させています。
@Saki-htr こちらレビューお願いいたします! |
横からすみません、気になったので質問させて下さい〜 未完了や自分の担当の提出物について、経過日数が多いもの(ほったらかしのもの)と少ないもの(新しく提出されたもの)のどちらを優先して見たいのかは意見が割れそうだと思いました |
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.
@Aseiide
お疲れさまです。
動作確認したところOKでした🙆♀️
コードも良いと思います! 提出物の並び順をテストする時はこのように書くのですね〜。とても勉強になりました🙏
一点気になったのですが、descriptionの変更前と変更後の画像の、黒字の「提出日時が古い」「提出日時が新しい」の部分が、実際の変更内容と逆になっているようですので、修正した方がいいかなと思いました。
他のタブと並び順が変わる点について確認中でいらっしゃるので、新たに仕様追加があるかもしれませんので、まだApprove
はしないでおきます〜
よろしくお願いいたします🙇♀️
@Aseiide ありがとうございます!結構手間が増えそうなのでIssueのポイントを3に増やしておきました〜! |
【未アサイン】
|
開発MTG質問メモ
上
|
01829c6
to
cf754e6
Compare
15bae9b
to
ba94b38
Compare
📝 システムでよく使う表現として昇順、降順という言葉があるのでそれを使うと厳密に表現できるかもです。 |
ba94b38
to
5e19f1a
Compare
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.
タブ・未アサインだけでなく、他のタブも昇順にし、関連するテストの修正を行いました。
scope :order_for_not_wip_list, -> { order(published_at: :desc, id: :desc) } | ||
scope :order_for_self_assigned_list, -> { order(commented_at: :desc, published_at: :desc) } | ||
scope :ascending_by_date_of_publishing_and_id, -> { order(published_at: :asc, id: :asc) } | ||
scope :order_for_self_assigned_list, -> { order('commented_at asc nulls first, published_at asc') } |
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.
nulls first
を指定することでcomment_at
がnil
のものが上に表示されます。
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.
{ order('commented_at asc nulls first, published_at asc') }
が何を行っているかペアプロで教えていただきましたので、こちらに書いておきます〜
order
の引数には、並び替えの優先度の高いものを先に渡す。なので、published_at
(提出日時)よりも先にcommented_at
(コメント日時)を渡している。(published_at
を先に書くと、提出日の昇順となってしまい、更に提出日が同じ提出物の中でcomment_at
の昇順になってしまう。)- コメントが無いものを先に表示したいので、
commented_at nulls first
と書いている。nulls first
と書くことで、commented_at
カラムがnull
のものを最初に持ってくることができる。 - これに
asc
を加えて、commented_at asc nulls first
と書くことで、comemnted_at
がnill
でない提出物=コメントがされている提出物を、「コメント日時の昇順」に並び替える。 published_at asc'
と書くことで、コメント無しの提出物を、「提出日の昇順」に並び替える
@@ -49,8 +49,8 @@ class Product < ApplicationRecord | |||
{ checks: { user: { avatar_attachment: :blob } } }) | |||
} | |||
scope :order_for_list, -> { order(created_at: :desc, id: :desc) } | |||
scope :order_for_not_wip_list, -> { order(published_at: :desc, id: :desc) } | |||
scope :order_for_self_assigned_list, -> { order(commented_at: :desc, published_at: :desc) } | |||
scope :ascending_by_date_of_publishing_and_id, -> { order(published_at: :asc, id: :asc) } |
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.
idは昇順がいいのか、降順がいいのかわからなかったのですが、published_at
に合わせて昇順にしています
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.
並び替えはこのように、model
で定義してcontroller
で使っているんですね〜
とても勉強になりました!
idは昇順がいいのか、降順がいいのか
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.
@komagata
idは昇順が良いか、降順が良いかわからなかったのでアドバイスいただけると嬉しいです。
自分としては、published_at: :asc
に合わせてidも昇順にしています。
d0105c9
to
49894ce
Compare
expected = products(:product15, :product63, :product62, :product64).map { |product| product.practice.title } | ||
actual = response.parsed_body['products'].map { |product| product['practice']['title'] } | ||
assert_equal expected, actual |
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.
expected
actual
それぞれの変数名が適切かあんまりわかってない
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.
いでさんより、こちらのテストが何を検証しているかペアプロでご説明いただいたので書いておきます🙏
- 並び順が
published_at
の昇順か をテストしたい。 product(:product15)
とかくとfixtures
からデータをひっぱってくることができるので、テストデータを利用している。expected
には、アプリ画面上に見える提出物のタイトル名が入った配列を入れている。actual
はapiから返ってきたレスポンスの、タイトル名の入った配列を入れている。expected
とactual
を比較してtrue
になればテストが通る
wip: false | ||
checker_id: <%= ActiveRecord::FixtureSet.identify(:machida) %> | ||
|
||
product64: | ||
practice: practice10 | ||
user: kimura | ||
body: 担当者のいる提出物です。 | ||
created_at: <%= Time.current %> | ||
updated_at: <%= Time.current %> | ||
published_at: <%= Time.current %> |
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.
ペアプロで、テスト実行時に必要だったため追記したとご説明いただきました:+1:
checker_id
に<%= ActiveRecord::FixtureSet.identify(:machida) %>
と渡すと、その方の担当の提出物になるんですね〜! 知らなかったのでとても勉強になりました
実装が複雑になったので、 |
49894ce
to
7329867
Compare
7329867
to
1111b10
Compare
1111b10
to
e04d24d
Compare
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.
@Aseiide
ペアプロで大変丁寧にご説明くださって、ありがとうございました。
動作確認はOKでした🙆♀️✨
気になった点をいくつかコメントさせていただきましたので、ご確認をお願いいたします〜🙏
@@ -49,8 +49,8 @@ class Product < ApplicationRecord | |||
{ checks: { user: { avatar_attachment: :blob } } }) | |||
} | |||
scope :order_for_list, -> { order(created_at: :desc, id: :desc) } |
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.
created_at
をpublishe_at: :asc
に変更していただけますと幸いです。
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.
こちら、自分の勘違いでした。
order_for_list
を提出物一覧ページで使っている部分はascending_by_date_of_publishing_and_id
に置き換えているのでここのcreated_at
は変更不要でした。
expected = products(:product15, :product63, :product62, :product64).map { |product| product.practice.title } | ||
actual = response.parsed_body['products'].map { |product| product['practice']['title'] } | ||
assert_equal expected, actual |
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.
いでさんより、こちらのテストが何を検証しているかペアプロでご説明いただいたので書いておきます🙏
- 並び順が
published_at
の昇順か をテストしたい。 product(:product15)
とかくとfixtures
からデータをひっぱってくることができるので、テストデータを利用している。expected
には、アプリ画面上に見える提出物のタイトル名が入った配列を入れている。actual
はapiから返ってきたレスポンスの、タイトル名の入った配列を入れている。expected
とactual
を比較してtrue
になればテストが通る
wip: false | ||
checker_id: <%= ActiveRecord::FixtureSet.identify(:machida) %> | ||
|
||
product64: | ||
practice: practice10 | ||
user: kimura | ||
body: 担当者のいる提出物です。 | ||
created_at: <%= Time.current %> | ||
updated_at: <%= Time.current %> | ||
published_at: <%= Time.current %> |
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.
ペアプロで、テスト実行時に必要だったため追記したとご説明いただきました:+1:
checker_id
に<%= ActiveRecord::FixtureSet.identify(:machida) %>
と渡すと、その方の担当の提出物になるんですね〜! 知らなかったのでとても勉強になりました
scope :order_for_not_wip_list, -> { order(published_at: :desc, id: :desc) } | ||
scope :order_for_self_assigned_list, -> { order(commented_at: :desc, published_at: :desc) } | ||
scope :ascending_by_date_of_publishing_and_id, -> { order(published_at: :asc, id: :asc) } | ||
scope :order_for_self_assigned_list, -> { order('commented_at asc nulls first, published_at asc') } |
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.
{ order('commented_at asc nulls first, published_at asc') }
が何を行っているかペアプロで教えていただきましたので、こちらに書いておきます〜
order
の引数には、並び替えの優先度の高いものを先に渡す。なので、published_at
(提出日時)よりも先にcommented_at
(コメント日時)を渡している。(published_at
を先に書くと、提出日の昇順となってしまい、更に提出日が同じ提出物の中でcomment_at
の昇順になってしまう。)- コメントが無いものを先に表示したいので、
commented_at nulls first
と書いている。nulls first
と書くことで、commented_at
カラムがnull
のものを最初に持ってくることができる。 - これに
asc
を加えて、commented_at asc nulls first
と書くことで、comemnted_at
がnill
でない提出物=コメントがされている提出物を、「コメント日時の昇順」に並び替える。 published_at asc'
と書くことで、コメント無しの提出物を、「提出日の昇順」に並び替える
assert_equal "#{oldest_product.practice.title}の提出物", titles.first | ||
assert_equal oldest_product.user.login_name, names.first | ||
assert_equal "#{newest_product.practice.title}の提出物", titles.last | ||
assert_equal newest_product.user.login_name, names.last | ||
end | ||
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.
test/system/product/self_assigned_test.rb
で書いてくださったのと同様に、fixturesからデータをひっぱってくると簡潔で良いかなと思いましたので、ご変更いただけますと幸いです🙏
@@ -48,10 +48,10 @@ class Product::UncheckedTest < ApplicationSystemTestCase | |||
# 提出日の降順で並んでいることを検証する | |||
titles = all('.thread-list-item-title__title').map { |t| t.text.gsub('★', '') } |
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.
こちらも、fixturesからデータを持ってくると、より簡潔なコードになって良いと思います〜🙏
@@ -48,10 +48,10 @@ class Product::UncheckedTest < ApplicationSystemTestCase | |||
# 提出日の降順で並んでいることを検証する |
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.
こちらのコメントも「昇順」にご変更をお願いいたします〜🙏
practice: practice, | ||
checker_id: checker.id | ||
) | ||
product = products(:product8) | ||
visit_with_auth "/products/#{product.id}", 'kimura' | ||
fill_in('new_comment[description]', with: 'test') | ||
click_button 'コメントする' |
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.
いでさんとペアプロしていただいた際にこちらのテストの意図を教えていただきましたので、メモしておきます〜
- 「提出物を提出したユーザー本人(
kimura
)が、自分の提出物にコメントしても、「未完了」タブの「未返信」に、提出物が表示されたまま であることをテストしている。
app/models/product.rb
Outdated
@@ -122,13 +122,13 @@ def self.unchecked_no_replied_products_ids(current_user_id) | |||
def self.self_assigned_no_replied_products(current_user_id) | |||
no_replied_product_ids = self_assigned_no_replied_product_ids(current_user_id) | |||
Product.where(id: no_replied_product_ids) | |||
.order(commented_at: :desc, published_at: :desc) | |||
.order(commented_at: :desc, published_at: :asc) |
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.
自分の担当タブの「未返信」には、全てコメントが付いていない提出物が表示されるので、commented_at: :desc
は不要ではないかと思いました。
また、こちらにもid: :asc
を追加した方が良いと思います〜
@@ -49,8 +49,8 @@ class Product < ApplicationRecord | |||
{ checks: { user: { avatar_attachment: :blob } } }) | |||
} | |||
scope :order_for_list, -> { order(created_at: :desc, id: :desc) } | |||
scope :order_for_not_wip_list, -> { order(published_at: :desc, id: :desc) } | |||
scope :order_for_self_assigned_list, -> { order(commented_at: :desc, published_at: :desc) } | |||
scope :ascending_by_date_of_publishing_and_id, -> { order(published_at: :asc, id: :asc) } |
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.
並び替えはこのように、model
で定義してcontroller
で使っているんですね〜
とても勉強になりました!
idは昇順がいいのか、降順がいいのか
idは、昇順(上から見た並び順)に付与されたほうが、私も違和感がないと思いましたので、良いと思います〜
e676b29
to
46cbf32
Compare
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.
@Saki-htr
テストの修正とcommented_at
が不要だった件に対応したのでレビューお願いいたします。
@@ -49,8 +49,8 @@ class Product < ApplicationRecord | |||
{ checks: { user: { avatar_attachment: :blob } } }) | |||
} | |||
scope :order_for_list, -> { order(created_at: :desc, id: :desc) } |
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.
こちら、自分の勘違いでした。
order_for_list
を提出物一覧ページで使っている部分はascending_by_date_of_publishing_and_id
に置き換えているのでここのcreated_at
は変更不要でした。
Product.where(id: no_replied_product_ids) | ||
.order(commented_at: :desc, published_at: :desc) | ||
.order(published_at: :asc, id: :asc) | ||
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.
「自分の担当」の未返信で使われているのですが、未返信の時点でcommented_at
には何も入ってなく、意味を為していなかったので削除し、published_at
と id
で並ぶようにしました。
@Aseiide |
@Saki-htr 全然だいじょうぶです! |
@Aseiide ペアプロした際に、"「自分の担当」タブの「全て」欄の、コメント有りと無しの境目がどこか分かりづらい" 点についてお話したかと思うのですが、
と個人的に考えましたので私の方では よろしくお願いいたします。 |
Co-authored-by: Masaki Komagata <komagata@gmail.com>
@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ですー🙆♂️
関連issue
概要・要件
提出物一覧のページにおいて、以下の要件に従って並び替える。
変更前と変更後のスクリーンショットイメージ