質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Q&A

解決済

1回答

1539閲覧

RubyonRailsにて、右記の正しい記述方法を知りたい。→ where.not(id: ◯◯, id: □□) ※◯◯は整数で□□はハッシュ

YoheiKobayashi

総合スコア15

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

0グッド

0クリップ

投稿2020/04/08 01:22

前提・実現したいこと

独学の初学者です。RubyonRailsで個人アプリを作成しております。学習のためRubocopを初導入した所、どうしても自己解決出来ない点が生じてしまいました。

"user"をインクリメンタルサーチ出来るように記述していた所、開発完了後にRubocopから以下のお叱りを受けました。

yml

1#.rubocop_todo.yml 2 3Offense count: 1 4Lint/DuplicateHashKey: 5 Exclude: 6 - 'app/controllers/users_controller.rb'

確かに記述を見ると、以下の5行目のように重複したハッシュキー"id:"が存在していました。

ruby

1#app/controllers/users_controller.rb 2 3 1: class UsersController < ApplicationController 4 2: def index 5 3: return nil if params[:keyword] == "" 6 4: 7 5: @users = User.where(['nickname LIKE?', "%#{params[:keyword]}%"]).where.not(id: current_user.id, id: params[:member]).limit(10) 8 6: respond_to do |format| 9 7: format.html 10 8: format.json 11 9: end 1210: end 1311:end

ハッシュキー"id:"をまとめる記述方法を調べたものの、自己解決に至ることが出來ませんでした。基本的なことで大変恐れ入りますが、御教授いただければ幸いです。

試したこと

ruby

1失敗例1) 〜 .where.not(id: [current_user.id, params[:member]]) 2失敗例2) 〜 .where.not(id: current_user.id, params[:member]) 3失敗例3) 〜 .where.not(id: current_user.id AND params[:member]) 4失敗例4) 〜 .where.not(id: (current_user.id, AND params[:member])) 5失敗例5) 〜 .where.not(id: current_user.id.to_h, AND params[:member]) 6失敗例6) 〜 .where.not(id: {current_user.id.to_h, params[:member]}) 7    ...etc

補足情報(FW/ツールのバージョンなど)

実装状況自体は問題が無く、あくまでRubocopからのお叱りに対応したいという内容なので、関連するJavascriptの記述等は省略させていただきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

.whereの列の条件として複数を渡したいときは、配列として渡すことができます。

ruby

1.where.not(id: [current_user.id, params[:member]])

投稿2020/04/08 01:25

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/04/08 01:26

「失敗例」として上がっていますが、どのようになったのですか?
maisumakun

2020/04/08 01:27

もっと原始的に、「.where.not(id: current_user.id).where.not(id: params[:member])」というようなやり方も考えられます。
YoheiKobayashi

2020/04/08 01:32

御教授、ありがとうございます。 ご回答頂いた記述で当初私も問題ないと考えていたのですが、記述後にインクリメンタルサーチ部分の実装状況を確認した所、検索結果が何も表示されなくなる…という結果になりました。
maisumakun

2020/04/08 01:33

params[:member]にnilが来ることはありますか?
YoheiKobayashi

2020/04/08 01:34

「.where.not(id: current_user.id).where.not(id: params[:member])」 確かにこちらはうまくいきました!ただ、where.notが二重になっているため、rubocopからまた違う内容のお叱りを受けました。 rubocopに全て従う…ということ自体が、セオリーから外れているという考え方もあるのでしょうか^^;
maisumakun

2020/04/08 01:37

> rubocopに全て従う…ということ自体が、セオリーから外れているという考え方もあるのでしょうか^^; 両者の「お叱り」は、別レベルのものと考えたほうがいいです。Lint/系のものは、「文法的によろしくない」ものに出ます。
YoheiKobayashi

2020/04/08 01:48

> 両者の「お叱り」は、別レベルのものと考えたほうがいいです。Lint/系のものは、「文法的によろしくない」ものに出ます。 御教授ありがとうございます! 「.where.not(id: current_user.id).where.not(id: params[:member])」 でやることで、rubocopからのLint系の指摘は無くなりました。 rubocopの基本をしっかりと抑える必要があると振り返りました…本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問