67636


リレーション先のデータの取得ができません。基本的な内容かと思いますが、数時間調べ考えても解決できずお力をお貸しください。  
下記テーブルはdocumentsテーブルが「一」に対して、他テーブルが「多」の関係です。そのため、documentsテーブルは中間テーブルとなり多対多のリレーションができています。

コントローラーのindexアクションで、指定のuser_idのデータを持ったComapnyオブジェクトを作りたいのですが、どのようにすればよいでしょうか。

コントローラー

[code]

      def index
    
        @company = Company. 　　#ここをどのように記載すべきでしょうか
    
        end
    
[/code]

・usersテーブル  
id  
name

・companiesテーブル  
id  
name

・itemsテーブル  
id  
name

・documentsテーブル  
id  
name  
company_id  
item_id  
user_id


CC BY-SA 4.0
2020-06-13T01:27:44.377
67609
2020-06-16T07:14:07.573
2020-06-13T05:00:56.463
3060
40583
question
ruby-on-rails
リレーション先のデータ取得ができません


> リレーションができています

リレーションが正しくかけているというならサブテーブルでのデータ絞り込み

[code]

    @company = Company.includes(:users).where(users: {id: 指定のuser_id})
    
[/code]

でいいと思います


CC BY-SA 4.0
2020-06-13T19:02:46.010
67636
2020-06-13T19:02:46.010
67609
answer


`user_id`が何らかの形で得られるのであれば普通はそれに紐付く`User`のインスタンスが何らかの形であるはずです。

[code]

    user.companies
    
[/code]

のように`User`のリレーション経由で検索するようにしてください。

モデルに由来しない裸の`user_id`が現れてほかに使われない、というケースであれば直接`Company`から検索するのが効率的ですが、あまりそういうケースはないと思います。その場合でも、`users`テーブルの`id`を検索条件にするのではなく、`documents`テーブルの`user_id`を検索条件にした方がよいです。


CC BY-SA 4.0
2020-06-16T07:14:07.573
67713
2020-06-16T07:14:07.573
5793
67609
answer