質問編集履歴

2 内容を再度修正

ayu

ayu score 212

2016/03/01 21:47  投稿

railsでお気に入り機能の、もらったお気に入りをカウントする方法
こんにちは。
今回は、お気に入り機能を実装しているのですが、もらったお気に入りの数を表示するやり方がなかなか理解できません。
**「User」「Post」「Favorite」**の3つのテーブルがあります。
```
class User < ActiveRecord::Base
 has_many :posts
 has_many :favorite
end
class Post < ActiveRecord::Base
 belongs_to :user
 has_many :favorites
end
class Favorite < ActiveRecord::Base
 belongs_to :user
 belongs_to :post
end
```
```
User←→Post←→Favorite
 ↓        ↑
 ↓                         ↑
→→→→→→→→→→
```
ここの投稿されたPostに対するFavoriteの数を取得したいです。
このやり方ですと、上記のモデルでUserがFavoriteすることはできました。
```
class FavoriteController < ApplicationController
 def create
   @post = Post.find(params[:post_id])
   favorite = current_user.favorites.build(post_id: @post.id)
   favorite.save
   redirect_to root_url
 end
end
```
UserがFavoriteした数はなんとか取得できるのですが、
Other_Userが自分の投稿したPostに対して、Favoriteされた数が取得できません。
能動態・受動態の、受動態の部分が出来ておりません。
こちらのやり方が、どのようにするのかわからなかったのです。
下記のようにした場合、UserがFavoriteしたPostが出てくるのはわかりました。
```
class User < ActiveRecord::Base
 has_many :posts
 has_many :favoritess
 has_many :favorite_posts, through: :favorites, source: :post
end
class Post < ActiveRecord::Base
 belongs_to :user
 has_many :favorites
end
class Favorite < ActiveRecord::Base
 belongs_to :user
 belongs_to :post
end
```
自分が投稿したPostに対して、Favoritesされた数の取得がわかりませんでした。
  • Ruby on Rails

    19515 questions

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

1 内容を具体化

ayu

ayu score 212

2016/03/01 21:07  投稿

railsでお気に入り機能の、もらったお気に入りをカウントする方法
こんにちは。
今回は、お気に入り機能を実装しているのですが、もらったお気に入りの数を表示するやり方がなかなか理解できません。
**「User」「Post」「Favorite」**の3つのテーブルがあります。
```
class User < ActiveRecord::Base
 has_many :posts
 has_many :favorite
end
class Post < ActiveRecord::Base
 belongs_to :user
 has_many :favorites
end
class Favorite < ActiveRecord::Base
 belongs_to :user
 belongs_to :post
end
```
こういう感じのモデルにしております。
ここから、UserがFavoriteを作成・削除することは可能であり、Favorite数もカウントすることはできます。
問題は、**自分が投稿したPostに対して、どれだけFavoriteをされているか**が知りたいです。
これのやり方がなかなか分からず、ご教授をお願いします。
```
User←→Post←→Favorite
 ↓         ↑
 →→→→→→→→→→
```
ここの投稿されたPostに対するFavoriteの数を取得したいです。
このやり方ですと、上記のモデルでUserがFavoriteすることはできました。
```
class FavoriteController < ApplicationController
 def create
   @post = Post.find(params[:post_id])
   favorite = current_user.favorites.build(post_id: @post.id)
   favorite.save
   redirect_to root_url
 end
end
```
UserがFavoriteした数はなんとか取得できるのですが、
Other_Userが自分の投稿したPostに対して、Favoriteされた数が取得できません。
能動態・受動態の、受動態の部分が出来ておりません。
こちらのやり方が、どのようにするのかわからなかったのです。
  • Ruby on Rails

    19515 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る