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
ユーザー検索で休会・退会ユーザーも引っかかるようにする #7435
base: main
Are you sure you want to change the base?
ユーザー検索で休会・退会ユーザーも引っかかるようにする #7435
Conversation
@nishitatsu-dev |
@kurumadaisuke |
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.
@kurumadaisuke
見ました〜。めちゃくちゃ難しいですね😅
ひとまずkomagataさんに以下のご相談をお願いします🙏
- 右上の検索:Searchableモジュールの変更方針について
- メンターの検索:「表示人数が少ない問題」への対応について
@@ -13,7 +13,7 @@ module Searchable | |||
# rubocop:disable Metrics/BlockLength | |||
class_methods do | |||
def search_by_keywords(searched_values = {}) | |||
ransack(**params_for_keyword_search(searched_values)).result.search_by_keywords_scope | |||
ransack(**params_for_keyword_search(searched_values)).result |
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さんと相談してみて下さい🙏)
変更の方針について
以下2種類の方針があると思います。
-
方針①:このモジュール本体は変更せず、利用側を変更する
「このSearchableモジュールが他の約10個のモデルファイルにincludeされていて、変更の影響範囲が広いので変更しない」という考えです。
利用側の変更については、以下を削除すると「右上の検索」がうまく引っかかりました(間違ってたらアレなので確認してみて下さい🙏)
Line 365 in 6dcc837
scope :search_by_keywords_scope, -> { unretired } -
方針②:このモジュールを変更する
「search_by_keywords_scope
を使って検索を制限しているのは、app/models/user.rb
だけ。今回それも無くすので、根本から消す」という考えです。
今回の変更に加えて、以下の2箇所も削除できると思います
削除①:8〜11行目のスコープ定義
削除②:↓利用側のスコープ上書き(どちらの方針でも削除することになります)
Line 365 in 6dcc837
scope :search_by_keywords_scope, -> { unretired }
どちらの方針でも必要なこと
どちらの方針にしても「スコープの上書き」を削除するので、以下のコメント部分を見直す必要があります
(ただ、app/controllers/api/users_controller.rb
を触ってみた感じでは、「スコープの上書き」は、このコメント部分には効いてなさそうです)
bootcamp/app/controllers/api/users_controller.rb
Lines 43 to 45 in 6dcc837
# search_by_keywords内では { unretired } というスコープが設定されている | |
# 退会したユーザーに対しキーワード検索を行う場合は、一旦 unscope(where: :retired_on) で { unretired } スコープを削除し、その後で retired スコープを設定する必要がある | |
target == 'retired' ? users.unscope(where: :retired_on).retired : users |
bootcamp/app/controllers/api/talks_controller.rb
Lines 15 to 17 in 6dcc837
# search_by_keywords内では { unretired } というスコープが設定されている | |
# 退会したユーザーも検索対象に含めたいので、unscope(where: :retired_on) で上記のスコープを削除 | |
searched_users = users.search_by_keywords(word: params[:search_word]).unscope(where: :retired_on) |
ひとまず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.
@kurumadaisuke
下記コメントへのご質問、こちらに回答しますね〜
(イメージが合うように、細かく長々と書きますが、ご容赦下さい🙇🏻)
方針①:このモジュール本体は変更せず、利用側を変更する
⇨ 利用者側とはransack(**params_for_keyword_search(searched_values)).resultのことを指していますか?
なので、今回のコードの修正内容が該当している認識です。
利用側は、このSearchableモジュール(searchable.rb
全体)をincludeしている、約10個のモデルファイル(include Searchable
が書いてあるファイル)のつもりでした。
約10個のモデルファイルの中で、app/models/user.rb
だけがsearch_by_keywords_scope
を上書きしているので、
利用側での変更は、「app/models/user.rb
での、scope :search_by_keywords_scope, -> { unretired }
の削除」だけになります。
方針②:このモジュールを変更する
⇨ これはscope :search_by_keywords_scope, -> { unretired } を根本的に削除する方法であっていますか?
8〜11行目のスコープ定義の削除ですが、以下行を指していますか?
このSearchableモジュールの変更は、以下の2点のつもりでした。
削除①-1:スコープの定義の削除:下記コードの8〜11行目です
削除①-2:スコープの使用箇所の削除:下記コードの16行目です(今回くるまさんが削除した部分です)
bootcamp/app/models/concerns/searchable.rb
Lines 3 to 17 in bf32957
module Searchable | |
extend ActiveSupport::Concern | |
COLUMN_NAMES_FOR_SEARCH_USER_ID = %i[user_id last_updated_user_id].freeze | |
included do | |
# 拡張する場合はこのスコープを上書きする | |
scope :search_by_keywords_scope, -> { all } | |
end | |
# rubocop:disable Metrics/BlockLength | |
class_methods do | |
def search_by_keywords(searched_values = {}) | |
ransack(**params_for_keyword_search(searched_values)).result.search_by_keywords_scope | |
end |
削除②:このSearchableモジュール本体側での削除に伴って、利用側のapp/models/user.rb
でも、scope :search_by_keywords_scope, -> { unretired }
を削除します。
この利用側の変更は、方針①と同じになります。
分かりにくい所あればご質問下さい。よろしくお願いいたします🙏
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.
@nishitatsu-dev
確認が遅くなり申し訳ありません🙇♂️
ご説明いただいたので大体わかったと思います!!
# search_by_keywords内では { unretired } というスコープが設定されている | ||
# 退会したユーザーに対しキーワード検索を行う場合は、一旦 unscope(where: :retired_on) で { unretired } スコープを削除し、その後で retired スコープを設定する必要がある | ||
target == 'retired' ? users.unscope(where: :retired_on).retired : users | ||
target == 'all' ? users.unscope(where: %i[retired_on hibernated_at]) : 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.
「元のコードが何か変な感じ?」で、それがクリアになると、別の変更方法が必要になるかもしれません。
以下、少し調べた結果を書きます。一度、komagataさんに相談をお願いします🙏
調べた結果
- localhost:3000/users?target=allで、表示される人数「全員(67)」が少ないです。
db/fixtures/users.yml
には77人います(marumarushainが25人、コードで生成されています)。表示されていない人は「復帰 太郎」や「辞目 辞目夫」など、hibernated_at
やretired_on
に値を持っている人のようです。
ここで思ったのは「元々カウントされていない人を検索しても引っかからないのでは?」です。
(表示人数が正しくなれば、コードの変更不要になるかも???)
この「表示人数が少ない問題」は、このissueの範囲を超える話かもしれないので、komagataさんと相談してみて下さい🙏 app/models/concerns/searchable.rb
側のコメントにも書きましたが、以下のスコープ上書きは効いて無さそうです。また、今回変更したhibernated_at
もスコープ設定されていないので、コード中のコメントに書いてある内容とは別の所で制限がかかってそうです。
(上記の「表示人数の問題」をクリアすれば、この部分のコード変更が変わる可能性があると思います。変わらないかもしれませんが。。。)
Line 365 in 6dcc837
scope :search_by_keywords_scope, -> { unretired }
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.
@nishitatsu-dev
ご確認ありがとうございます!!
ちょっと私の方でもわかっていない部分が多いと思うので、コメントの内容を確認させてください🙏
変更の方針について
方針①:このモジュール本体は変更せず、利用側を変更する
⇨ 利用者側とはransack(**params_for_keyword_search(searched_values)).result
のことを指していますか?
なので、今回のコードの修正内容が該当している認識です。
方針②:このモジュールを変更する
⇨ これはscope :search_by_keywords_scope, -> { unretired }
を根本的に削除する方法であっていますか?
8〜11行目のスコープ定義の削除ですが、以下行を指していますか?
authenticates_with_sorcery!
VALID_SORT_COLUMNS = %w[id login_name company_id last_activity_at created_at report comment asc desc].freeze
AVATAR_SIZE = '88x88>'
RESERVED_LOGIN_NAMES = %w[adviser all graduate inactive job_seeking mentor retired student student_and_trainee trainee year_end_party].freeze
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.
調べた結果
こちら確かに私も元々のコードがなんだかおかしい気がしていて、コメントの内容も含めハマってしまいました😰
表示される人数「全員(67)」が少ないです。
こちら気づかなかったので、確認していただきありがとうございます!🙏
こちらの仕様についてはkomagataさんと相談していこうと思いますmm
@komagata Searchableモジュールの変更方針についてFBCアプリの右上に存在する検索処理ではSearchableモジュールを利用しており、約10個のモデルファイルにincludeされています。 変更方法案① 変更方法② ※ どちらの方針でも、 もしくは、他の方法を用いるべきでしょうか?🙏 メンターの検索:「表示人数が少ない問題」への対応について
|
まだ判断するための材料がたりないとおもうので、それぞれの影響範囲(実際のどのページにもちいられるか。そのページが変わっても問題ないか)を調べてみてください。 そのうえで @kurumadaisuke さんがどうすべきだと思うかも考えてみてください。
メンターの検索というのはどういう意味でしょうか? |
こちら調査した後に回答いたします。
一般ユーザー(受講生)からの「ユーザー」タブを選択した時の表示内容と |
「言っていました」というのはどういう意味でしょうか? |
すいません。 一般ユーザー(受講生)からの「ユーザー」タブを選択した時の表示内容と |
@kurumadaisuke なるほどです! |
42cd088
to
3f6e7c7
Compare
こちら調査してみたのですが、Searchableモジュールの テストの結果は一つ失敗しましたが、元々退会/休会ユーザーが表示されないことを確認するテストだったのでアプリ自体の仕様が変わったので、テスト自体を修正しました。 なので調査結果では、大元を削除しても影響範囲がほとんどないっと考え不要なコードは削除するべきだと考えました🙏 |
と書いてあって、検索対象の拡張の仕組みを用意してくれている感じ(あえてやっている)のでちょっと悩むところですが、まあ削除しちゃっていいとおもいます~。 |
Issue
概要
ユーザー検索で休会・退会ユーザーも引っかかるようにする
変更確認方法
feature/searchable_suspended_and_unsubscribed_users
をローカルに取り込むhttp://localhost:3000/users
にアクセスし、ユーザー一覧を表示する※ 右上の検索バーから休会ユーザー名は元々表示されます。
Screenshot
変更前
変更後