前提・実現したいこと
usersテーブル
mask_usersテーブル
masksテーブル
mask_makersテーブル
makersテーブル
があります。
usersコントローラーのshow.html.hamlの中でmakersテーブルの情報を表示させたいと思っています。
usersテーブルからみるとmasksテーブルを挟んでmakersテーブルがあるのですが、
表示させる方法はありますでしょうか?
発生している問題・エラーメッセージ
ruby
1NoMethodError in UsersController#show 2undefined method `makers' for #<Mask::ActiveRecord_Associations_CollectionProxy:0x00007fbf417cc560>
該当のソースコード
ruby
1 def show 2 user = User.find_by(id: current_user.id) 3 masks = Mask.all 4 makers = Maker.all 5 @makers = user.masks.makers 6 end
haml
1.users-situation 2 %h1 3 在庫状況 4 .users-situation__contents 5 .users-situation__contents__content 6 - @makers.each do |maker| 7 .users-situation__contents__content__maker 8 = maker.name 9 .users-situation__contents__content__size 10 大人用 11 .users-situation__contents__content__stock 12 50箱
user.rb
ruby
1 has_many :mask_users 2 has_many :masks, through: :mask_users 3 validates :name, :address, :phone, presence: true, uniqueness: true
mask.rb
ruby
1 has_many :mask_users 2 has_many :mask_sizes 3 has_many :mask_makers 4 has_many :mask_stocks 5 has_many :mask_prices 6 has_many :users, through: :mask_users 7 has_many :sizes, through: :mask_sizes 8 has_many :makers, through: :mask_makers 9 has_many :stocks, through: :mask_stocks 10 has_many :prices, through: :mask_prices
maker.rb
has_many :mask_makers has_many :masks, through: :mask_makers
アソシエーションを定義しているコードを追記して欲しいです。どのように中間テーブルの定義をされていますか?
# usersテーブル
```ruby
has_many :mask_users
has_many :masks, through: :mask_users
```
# mask_usersテーブル
```ruby
belongs_to :mask
belongs_to :user
```
# masksテーブル
```ruby
has_many :mask_users
has_many :mask_sizes
has_many :mask_makers
has_many :mask_stocks
has_many :mask_prices
has_many :users, through: :mask_users
has_many :sizes, through: :mask_sizes
has_many :makers, through: :mask_makers
has_many :stocks, through: :mask_stocks
has_many :prices, through: :mask_prices
```
# mask_makersテーブル
```ruby
belongs_to :mask
belongs_to :maker
```
# makersテーブル
```ruby
has_many :mask_makers
has_many :masks, through: :mask_makers
```
となっております。
回答1件
あなたの回答
tips
プレビュー