質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.74%

  • Ruby on Rails

    6723questions

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

twitter"いいね!"機能について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 162

_nori_

score 9

twitter「いいね」機能を初めて学んでいます。
createメソッド内で何故"params[:post_id]が使われてるか理解できません。
どの段階で
どなたか教えてくださる方がいましたら、よろしくお願いします。

"user", "post"のモデル、コントローラー、likeモデルは既に作成済み。

class LikesController < ApplicationController
before_action :authenticate_user

def create
@like = Like.new(user_id: @current_user.id,  post_id: params[:post_id])
@like.save
redirect_to("/posts/#{params[:post_id]}")
end

def destroy
@like = Like.find_by(user_id: @current_user.id, post_id: params[:post_id])
@like.destroy
redirect_to("/posts/#{params[:post_id]}")
end

end

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

情報が少ないですが、ソースの内容からみて、"railsでTwitterの類似アプリをつくっている"ということであってますよね?

でしたら、おそらくlikeモデルはpostモデルとhas_manyやbelongs_toで親子関係を構築していると推測されます。1つのpostに対して複数のlikesが紐づいていて、それはlike.rbに持っているpost_idで繋がっているという設計なはずです。

ですので、

@like = Like.new(user_id: @current_user.id,  post_id: params[:post_id])


では、post_idに親となるpostのidをセットしています。paramsはviewから渡される値で(性格にはhttpのpostメソッドのパラメーター)、その中に親となるpost_idが格納されています。(そのようにviewのコードを書いているはずです)

そして

redirect_to("/posts/#{params[:post_id]}")


では、"いいね"したあとに表示する画面を指定しています。これは"いいね"した投稿(post)を表示しているのではないかな?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/14 13:27

    分かりにくい質問の仕方にも関わらず回答ありがとうございます。
    初学者でプログラムサイト”progate”にて擬似Twitterを作ってました。

    おそらくlikeモデルはpostモデルとhas_manyやbelongs_toで親子関係を構築していると推測されます。
    > Qiitaでも調べたのですが、そこでも"has_many"や"belongs_to"を使ってるようでした。
    しかし、progateでは出てこないんですよね…。

    paramsはviewから渡される値で(性格にはhttpのpostメソッドのパラメーター)、その中に親となるpost_idが格納されています。(そのようにviewのコードを書いているはずです)
    > paramsにはviewから値を渡されてるはずなんですが…。探しても見当たらなくて。と言うか、自分が気付けてないだけと思うのですが。

    railsカリキュラムの他は一応全部理解は出来たのですが、どうして「いいね機能」だけ理解出来ません。笑

    親子関係をネット、書籍等で調べてみます。
    その後で、もう一度教えて貰えませんか。よろしくお願いします。

    初学者には心強い回答でした!ありがとう!

    キャンセル

  • 2018/04/16 20:56

    まぁ重要なところなので、ゆっくりちゃんと理解されるのがよいかと思いますよ。

    あと、controllerだけじゃなくて、対象のviewとmodel(User, Like, Post)あたりを貼ってもらえれば何かいい回答がえられるかもしれませんよ。

    viewから渡されるパラメーターがどうなっているか?を理解するのはrailsをweb開発の足がかりとして始めた人にとっては、実は結構キモとなる学習ポイントです。railsでerbに慣れてしまうと(そこをrailsが書きやすくラップしてくれちゃうため)基本がおろそかでも作れてしまいます。なので、少し難しいことをしようとすると逆にハマってしまうんですよね。昔からオーソドックスなスタイルでformを書いてた先輩方にとっては当たり前なことが、知らないでも作れてしまうんです。

    「なんでか、動かないな?」と思ったら、controllerで「put params」と書いてコンソールで確認する癖をつけとくと良いかもしれません。

    キャンセル

  • 2018/04/16 23:45

    返答ありがとうございます。

    今、関連ありそうな(ほぼ全部)view,model等をコピペしていてふと気づいたのですが、このcodeはサイト”Progate"さんの有料対象ですので公開の場に出していいのかと…。

    本当は内容を見て確認して頂きたいのですが、勝手言って申し訳ないのですが今回はお気持ちだけ頂戴させて頂けないでしょうか?

    h_daidoさんは、スタートアップのエンジニアをされているベテランの方のようですね。

    私は、webサイトを作りたくてプログラミングを始めてみました。そしたら、結構面白くハマってしまいました。

    h_daidoさんの仰る通り基本は大事であると思います。そこで、全くの初学者に薦める勉強方法及び書籍等がありましたら教えて下さい。宜しくお願いします。

    「なんでか、動かないな?」と思ったら、controllerで「put params」と書いてコンソールで確認する癖をつけとくと良いかもしれません。
    >controllerのどこで書くかも分からないくらいのど素人です。

    キャンセル

  • 2018/04/17 10:44 編集

    確かにそのとおりですね!著作権に注意したほうがよいので、そのほうが得策かと思います。

    私はベテランと呼べる域には到底到達していませんが、railsを始める人たちにとってデファクトスタンダードとなっているのは下記Michael Hartlさんのチュートリアルです
    https://railstutorial.jp/
    本当によくできているので、progateさんのチュートリアルの復習もかねてやっておくと勉強になるかもしれません。

    また、開発を進める上で"デバッグの知識"はとても重要になります。
    ①フロントエンド側を確認するにはchromeのdeveloperコンソールが基本です
      こちらは少しググるとたくさん情報が出てきます。view周りの調査やJavaScriptを使うフェーズになったらたくさん触ることになります。今は「そういったものがあるのか」程度で記憶しておくと良いでしょう。

    ②サーバーサイド側のチェックはターミナルのrails serverしたところでチェックが基本です。
      これを見やすくするためのgemとしてpryをおすすめしておきます。
      http://ruby-rails.hatenadiary.com/entry/20141024/1414081224
      がわかりやすくてよいです。全部読むとボリューミーになってしまうので、とりあえず「2. pryをインストール」と「5. pry-byebugでデバッグ」だけ見ておくだけでもだいぶ学習がはかどるでしょう。
      こちらを読めば、上記「puts xxxx」の場所や意味も自然と理解できると思います。

    キャンセル

  • 2018/04/18 20:37

    色々なアドバイスありがとうございます。

    railsチュートリアルやってみる事にしました。少し内容を確認したところ、結構難しそうですが2、3周させるつもりで進めて行こうと思います。

    railsチュートリアル は無料公開チュートリアルなので、今度行き詰まったときは具体的箇所について質問させて下さい。

    本当にありがとございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.74%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails

    6723questions

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