前提・実現したいこと
いいねしたportfolioを一覧表示したい
該当のソースコード
ruby
1テーブル設計 2 usersテーブル 3 t.string :nickname, null: false 4 t.string :email, null: false, default: "" 5 t.string :encrypted_password, null: false, default: "" 6 7 portfoliosテーブル 8 t.string :name,null: false 9 t.string :link,null: false 10 t.text :description,null: false 11 t.integer :likes_count 12 t.references :user,null: false,foreignkey: true 13 14 Likesテーブル 15 t.references :user,foreignkey: true 16 t.references :portfolio,foreignkey: true 17 18 19
ruby
1 アソシエーション 2 3 userモデル 4 has_many :portfolios, dependent: :destroy 5 has_many :like_portfolios, through: :likes, source: :portfolio 6 has_many :likes, dependent: :destroy 7 8 portfolioモデル 9 belongs_to :user 10 has_one_attached :image 11 has_many :likes, dependent: :destroy 12 has_many :liking_users, through: :likes, source: :user 13 14 likeモデル 15 belongs_to :portfolio, counter_cache: :likes_count 16 belongs_to :user
試したこと
ruby
1 portfolios_contoroller.rb 2 3 def favorite 4 @portfolios = current_user.likes.all 5 end
上記のようにしてみましたが、portfolioのlinkカラムが取り出せてなく、undefinded methodとなります。
補足情報(FW/ツールのバージョンなど)
rails 6.0.0
devise(ユーザー登録機能)
Mysql
この部分、以下のようにあとにthroughの記述を書く必要があったと思います。以下のようにするといかがでしょうか。
has_many :likes, dependent: :destroy
has_many :like_stories, through: :likes, source: :portfolio
ご回答ありがとうございます。
試してみましたが変わりませんでした。
ちなみにcurrent_userには正しく値が入っていますでしょうか?
[2] pry(#<PortfoliosController>)> @portfolios = current_user.likes.all
Like Load (0.4ms) SELECT `likes`.* FROM `likes` WHERE `likes`.`user_id` = 1
↳ app/controllers/portfolios_controller.rb:33:in `favorite'
=> [#<Like:0x00007f8536964a20 id: 114, user_id: 1, portfolio_id: 15, created_at: Sat, 10 Oct 2020 10:41:03 UTC +00:00, updated_at: Sat, 10 Oct 2020 10:41:03 UTC +00:00>]
となっておりましたので値は入っております。
回答2件
あなたの回答
tips
プレビュー