本の投稿機能を作成しコメント機能といいね機能を追加しました。
コントローラ内で記述するところでいくつかわからない点があったので質問です。
下に記述をまとめたので解釈があっているか確認していただきたいです!分かりにくかったらごめんなさい!
favorites_controller_rb↓
def create 1 book = Book.find(params[:book_id]) 2 favorite = Favorite.new(book_id: book.id) 3 favorite.user_id = current_user.id 4 favorite.save 5 redirect_to request.referrer end def destroy 1 book = Book.find(params[:book_id]) 2 favorite = current_user.favorites.find_by(book_id: book.id) 3 favorite.destroy 4 redirect_to request.referrer end
create
1行目 いいねをつけた投稿のidを取得
2行目 空のインスタンスに引数の情報(favoriteテーブルのbook_idに情報を入れるため1行目で持ってきたidを代入している?)を入れてfavoriteに代入
3行目 favoriteテーブルのuser_idに情報を入れるために指定している記述
4行目 保存
5行目 遷移先を指定
※2行目と3行目は1文にできますが個人的にこっちの方がわかりやすいのであえて別に記述しています。
destroy
1行目 いいねをつけた投稿のidを取得
2行目
3行目 削除
4行目 遷移先を指定
_favorite.html.erb↓
<% if book.favorited_by?(current_user) %> <%= link_to book_favorites_path(book), method: :delete do %> <div class="red"> <span><i class="fas fa-heart"></i></span> <%= book.favorites.count %> </div> <% end %> <% else %> <%= link_to book_favorites_path(book), method: :post do %> <span><i class="fas fa-heart"></i></span> <%= book.favorites.count %> <% end %> <% end %>
いいねをカウントする記述<%= book.favorites.count %>のfavoritesが複数形になっているのはアソシエーションしてから。(book.rbでhas_many :favoritesを記述したfavoritesからきている)
全て調べながら実装したものですが
method: :deleteとmethod: :postをなぜしているするのかと、link_toで指定したパスの意味がわからないのでわかる範囲で説明していただけると嬉しいです
縦に見てください↓
テーブル | ||
---|---|---|
user | book | favorite |
id | id | id |
name | user_id | user_id |
emai | title | book_id |
passward | body |
あなたの回答
tips
プレビュー