-
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
都道府県別ユーザー一覧の非React化 #8034
都道府県別ユーザー一覧の非React化 #8034
Conversation
637446a
to
2422cbb
Compare
@machida よろしくお願いいたします 🙇♂️ |
確認しました!! 実データを反映させたら、また新たな問題が見つかるかもしれませんが(東京が画面を埋め尽くすなど)、それは別Issueで対応していきたいと思いますー。 |
@machida |
@goruchanchan よろしくお願いいたします 🙇♂️ |
@Shrimprin レビュー依頼ありがとうございます!ぜひやらせていただきます!一週間程度で確認しますので今しばらくお待ちください🙇♂️ |
@goruchanchan |
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/models/area.rb
Outdated
if region == '海外' | ||
country = ISO3166::Country.find_country_by_any_name(area) | ||
def users_by_area(area) | ||
if (subdivision = ISO3166::Country[:JP].find_subdivision_by_name(area)) |
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/models/area.rb
Outdated
@@ -62,6 +59,17 @@ def number_of_users_by_region | |||
end | |||
end | |||
|
|||
def sorted_users_group_by_areas |
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.
sorted
が指すのは「エリア毎のユーザ数」だと思うのですが、created_at
とどっちを指すのかがわかりにくいと思いました。
また、返すのは「複数のgroup」だと思うので sourted_user_groups_by_area_user_num
はどうでしょうか?
また、ユーザを取得する段階で created_at
でソートしてしまってもいいんじゃないかなと思いました
def sourted_user_groups_by_area_user_num
users_grouped_by_areas = User.with_attached_avatar.order(created_at: :desc).group_by(&:area)
users_grouped_by_non_nil_area = users_grouped_by_areas.map do |area, users|
{ users:, area: } unless area.nil?
end.compact
users_grouped_by_non_nil_area.sort_by { |hash| -hash[:users].size }
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.
sorted が指すのは「エリア毎のユーザ数」だと思うのですが、created_at とどっちを指すのかがわかりにくいと思いました。
また、返すのは「複数のgroup」だと思うので sourted_user_groups_by_area_user_num はどうでしょうか?
ご指摘ありがとうございます。
ご提案いただいた変数名の方がい理解しやすそうなので修正します。
また、ユーザを取得する段階で created_at でソートしてしまってもいいんじゃないかなと思いました
そのほうがコードがスッキリしそうですね!修正します。
app/models/area.rb
Outdated
def users(region, area) | ||
if region == '海外' | ||
country = ISO3166::Country.find_country_by_any_name(area) | ||
def users_by_area(area) |
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.
おっしゃる通りですね!
Userモデルに移します。
end | ||
|
||
def show | ||
@area = params[:area_name] |
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.
いくつか area_name
が登場すると思うのですが、 area
ではダメなのでしょうか?
コメントいただきありがとうございます!
|
775cd7a
to
d3d4e9f
Compare
@goruchanchan |
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.
@Shrimprin お疲れ様です!ご対応ありがとうございます!細かなところで恐縮ですが2点ほど確認いただきたいです🙇♂️
ul.page-nav__items | ||
- number_of_users_by_region[region].each do |area, number_of_users| | ||
li.page-nav__item | ||
= link_to "#{area}(#{number_of_users})", users_area_path(area: area), class: 'page-nav__item-link a-text-link' |
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.
細かなところで恐縮ですが省略形で書けませんか?
= link_to "#{area}(#{number_of_users})", users_area_path(area: area), class: 'page-nav__item-link a-text-link' | |
= link_to "#{area}(#{number_of_users})", users_area_path(area:), class: 'page-nav__item-link a-text-link' |
|
||
def show | ||
@area = params[:area] | ||
@users = User.users_by_area(@area).page(params[:page]).per(15) |
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_by_area(@area)
の呼び出し方を見ると下記ようなメソッド名でもいいかと思いました🙇♂️あくまで個人的にそう感じただけなので参考程度と思っていただければと思います🙇♂️
@users = User.users_by_area(@area).page(params[:page]).per(15) | |
@users = User.by_area(@area).page(params[:page]).per(15) |
@goruchanchan |
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.
@Shrimprin お疲れ様です!LGTMと思いますので承認いたします!非React化とても勉強になりました!ありがとうございました🙏
@goruchanchan |
@komagata |
@@ -3,5 +3,12 @@ | |||
class Users::AreasController < ApplicationController | |||
def index | |||
@number_of_users_by_region = Area.number_of_users_by_region | |||
@sorted_user_groups_by_area_user_num = Kaminari.paginate_array(Area.sorted_user_groups_by_area_user_num).page(params[:page]).per(15) |
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.
15
マジックナンバーになっているので定数か変数にしてみてください。
他の場所のコードを参考にしてみてください〜。
test/models/user_test.rb
Outdated
@@ -730,4 +730,20 @@ class UserTest < ActiveSupport::TestCase | |||
test '.users_job returns all users when invalid job is passed' do | |||
assert_equal User.all, User.users_job('destroy_all') | |||
end | |||
|
|||
test 'area' 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.
test 'area' do | |
test '#area' do |
132f6b4
to
d1ab442
Compare
@komagata |
@@ -0,0 +1,10 @@ | |||
- number_of_users_by_region.each do |region, _| |
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.
- number_of_users_by_region.each do |region, _| | |
- number_of_users_by_region.each do |region| |
これは不要かも?
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の後の処理でハッシュのvalueを使用しているため、ハッシュのブロック変数名を省略せずに記述するようにしました。
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.
@Shrimprin コードの都合でそのように利用しているのだと思いますが、こうならないように書いた方が良いと思います。
「そもそものデータ構造を変える」「別のメソッドを用意する」などして他のプログラマーが見てもわかりやすいようにするのがいいと思います。
- users.each do |user| | ||
= render 'users/user', 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.
- users.each do |user| | |
= render 'users/user', user: | |
= render users |
こう書けた気がします。
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.
users/user
はレンダー元のviewファイルと別のディレクトリにあり短縮形が使えないため、非省略形のコレクションのレンダーで記述しました。
d1ab442
to
18ad9c4
Compare
@Shrimprin コンフリクトの修正をお願いします。 |
- 既存コードの削除は未実施 - ページネーションは未実施
- メソッドが返すのはエリアごとに分けられた「複数のグループ」のため、メソッド名をわかりやすく修正 - メソッド名の変更に伴い、テストを修正 - メソッド名の変更に伴い、コントローラーからの呼び出しを修正 - ユーザー取得時にソートするように修正
- user_by_areaメソッドはusersを返すためUserモデルに移動 - テストやコントローラを合わせて修正
18ad9c4
to
b1a3e89
Compare
@komagata |
test/models/user_test.rb
Outdated
assert_equal no_area_user.area, nil | ||
end | ||
|
||
test '#by_area' 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.
test '#by_area' do | |
test '.by_area' 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.
,
@Shrimprin テストが落ちているようです。 |
@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です〜🙆♂️
@komagata |
Issue
概要
[都道府県別ユーザー一覧(http://localhost:3000/users/areas)をReactからRails標準(html.slim)に変更しました。
変更確認方法
feature/rewrite-users-by-area-from-react-to-html
をローカルに取り込むbin/setup
を実行foreman start -f Procfile.dev
でローカルサーバを立ち上げ東京都(3)
をクリックすると東京都のユーザー一覧に遷移する宮城県
のタイトルをクリックすると宮城県のユーザー一覧に遷移する変更前
変更後
都道府県一覧
選択した都道府県のユーザー一覧