Ruby on Railsのfind_byメソッドについての質問です。
dogsテーブルとownerテーブルがあると仮定します。
dogsテーブル
|id|dog_name|owner_id|
|:--|:--:|
######ownerテーブル
id | owner_name |
---|
dogテーブルをownerテーブルと内部結合して、dog_nameで絞り込むときは
Ruby
1// controller.rb 2@dog = Dog.joins(:owner).find_by(dog_name: params[:dog_name])
SQL
1SELECT dog.* 2FROM 'dogs' 3INNER JOIN 'owners' ON 'dogs'.'owner_id' = 'owners'.'id' 4WHERE 'dogs'.'dog_name' = '(paramsで受け取った値)'
でいいと思うのですが、owner_nameで絞り込むにはどのようにしたら良いのでしょうか?
素人考えで、SQLのWHEREの部分が
SQL
1WHERE 'owners'.'owner_name' = '(paramsで受け取った値)' 2```こんな感じになればよいのではと思い 3 4```Ruby 5// controller.rb 6@dog = Dog.joins(:owner).find_by(owner_name: params[:owner_name])
と記述したら
Error
1PG::UndefinedColumn: ERROR: column dogs.owner_name does not exist
SQL
1SELECT dog.* 2FROM 'dogs' 3INNER JOIN 'owners' ON 'dogs'.'owner_id' = 'owners'.'id' 4WHERE 'dogs'.'owner_name' = '(paramsで受け取った値)'
となり、WHERE部分がうまく変更できていません。
また、
Ruby
1// controller.rb 2@dog = Dog.joins(:owner).find_by(owners.owner_name: params[:dog_name])
と記述したら
Error
1syntax error, unexpected ':'
と怒られてしまいました。
正しい使い方をご存知の方、何卒ご教授願います。
バージョン情報
Rails 5.2.3
Ruby 2.5.1p57
Ubuntu 18.04.3 LTS
PostgreSQL 10.8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 01:03
2019/11/19 01:35