>プログラミングいいね機能の追加2019年7月12日こんにちは、Nanayakuです。今回は、いいね機能の追加について解説していきます。最後にモデルの作成いいね機能を追加するために、まずfavoriteモデルを作成します。favoriteモデルは、表のようなテーブルになります。topic_id(integer)12以下の作成・読み込みコマンドを実行します。db:migratefavoriteモデルのアソシエーションfavoriteモデルのはUser・Topicモデルに対して、以下のアソシエーションを持ちます。UserとTopicは複数のFavoriteを所有します。FavoriteはUserとTopicをそれぞれ1つづつ所有します。:topic」が追記します。favoritesこのコマンドでfavoritesコントローラーを作成します。createアクションについて解説します。Favorite.new」は、Favoriteクラスのローカル変数favoriteを生成しました。current_user.id」は、ログインしているユーザーのidを格納しています。params[:topic_id]」は、いいねしたtopicのidを取得しています。これは、Viewのリンクをクリックした時に、取得できるように下のリンク作成で書き方を説明しています。save(保存)できたかを条件分岐でフィードバックで表示します。'favorites#create'」と追記します。ハートマークのリンクを画像のように作ります。topic.id)」の部分は、ルーターにあるfavorites#createアクションにへ遷移した時に、いいねしたtopicのidを取得することを表しています。:post」でルートを指定しています。これにより、お気に入り解除をやりやすくなります。いいね一覧画面の作成いいね一覧を表示するfavoritesコントローラーにindexアクションを作成します。ログインしているユーザーがいいねしているtopicを取得してViewで表示するので、ルーターのHTTPメソッドはGETになります。よって、ルーターに以下のコードを追記します。'favorites/index'いいね一覧のアソシエーション設定いいね一覧を作るために、以下のアソシエーションを追加します。'topic'これは、through(中間テーブル)を使うことで、ログインしているユーザーがいいねしているtopicを全て取得することができます。後は、いいね一覧を表示するViewを作成します。いいねの表示変更いいねのハートマークの表示変更は、画像のような条件分岐になります。1つ1つ解説していきます。'user'」を追記します。上記の「いいね一覧のアソシエーション設定」で説明通りで、表示しているtopicをいいねしている全てのユーザー(id)を取得します。!条件式」は条件式が偽だった場合に処理をします。これと同じもので「unless」があります。topic.favorite_users.include?(current_user)」も同じ意味になります。「include?」は存在しているか確認するときに使います。(Array)条件式は、「このtopicにログインしているユーザーのid(favorite_users)が存在しなかったら」と言う意味になります。存在しなかった場合、線のみのハートマークを表示し、クリックするとfavoriteテーブルに追加されます。ここまでが、青枠の中の処理です。次に、存在していた場合、赤色のハートマークを表示し、クリックするとfavoriteテーブルからカラムを削除する処理を追記します。コントローラーで、削除する(destroy)アクションを作成します。「Favorite.find_by(params[:topic_id]).destroy」は、取得したtopic_idを含むカラムを削除する処理です。'favorites#destroy'」と設定します。Viewは画像の青枠と同じようになり、HTTPメソッドが”delete”になっています。これで、いいねをしていると赤いハートが表示され、いいねしていないと色無しのハートが表示されます。参考Railsチュートリアルいいねのカウントいいねされた数を表示する方法は、上記のいいねの表示変更の条件分岐の下に以下のコードを追記します。%>これで画像のようにいいねされた数を表示できます。自分が犯した失敗アソシエーションをしっかり理解していなかったため、commentからfind_byを使っていいねされた数を表示しようとしましたが、topic/indexアクションにcommentを定義していないため、表示できませんでした。アソシエーションでテーブルを連携できるため、topic.カラム名.countで、そのカラムの数を取得できます。テーブルを1つ1つ独立していると考えていたのがダメでした。最後に備忘録がわりに作ったので、間違っている所とかあったら、コメントくれると嬉しいです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。関連記事ransackで検索フォームを作成こんにちは、Nanayakuです。今回は、「ransack」というgemを使って検索フォームを作成したので、使い方などを紹介します。こんにちは、Nanayakuです。今回は、Rubyのクラス・インスタンスについて解説していきます。...初学者がGemのversionを固定しないほうがいい理由こんにちは、Nanayakuです。boostの成果物を作成するための開発環境の構築をする時、Gemをがっちり決めて構築したせいで、やり直すはめになった失敗談を紹介します。...Docker+Railsでchatアプリを作るこんにちは、Nanayakuです。‏)さんのyoutube動画を参考にDockerでchatアプリを作ってみたので、それを解説したいと思います。...AWSアクセスキーが漏洩して破産しかけた話こんにちは、Nanayakuです。自分は、AWSアクセスキーをGitHubに公開してしまい、破産しかけたました。その経緯と予防・対策について説明します。boostを受講し、プログラマーへ転職しました。2020年2月からSES企業に入社。boostやプログラミングなど興味があることを発信していきます。AFFINGER5.。