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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

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

Q&A

解決済

1回答

586閲覧

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

_nori_

総合スコア21

Ruby on Rails

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

0グッド

0クリップ

投稿2018/04/12 09:30

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

ですので、

ruby

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

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

そして

ruby

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

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

投稿2018/04/13 04:55

h_daido

総合スコア824

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_nori_

2018/04/14 04: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カリキュラムの他は一応全部理解は出来たのですが、どうして「いいね機能」だけ理解出来ません。笑 親子関係をネット、書籍等で調べてみます。 その後で、もう一度教えて貰えませんか。よろしくお願いします。 初学者には心強い回答でした!ありがとう!
h_daido

2018/04/16 11:56

まぁ重要なところなので、ゆっくりちゃんと理解されるのがよいかと思いますよ。 あと、controllerだけじゃなくて、対象のviewとmodel(User, Like, Post)あたりを貼ってもらえれば何かいい回答がえられるかもしれませんよ。 viewから渡されるパラメーターがどうなっているか?を理解するのはrailsをweb開発の足がかりとして始めた人にとっては、実は結構キモとなる学習ポイントです。railsでerbに慣れてしまうと(そこをrailsが書きやすくラップしてくれちゃうため)基本がおろそかでも作れてしまいます。なので、少し難しいことをしようとすると逆にハマってしまうんですよね。昔からオーソドックスなスタイルでformを書いてた先輩方にとっては当たり前なことが、知らないでも作れてしまうんです。 「なんでか、動かないな?」と思ったら、controllerで「put params」と書いてコンソールで確認する癖をつけとくと良いかもしれません。
_nori_

2018/04/16 14:45

返答ありがとうございます。 今、関連ありそうな(ほぼ全部)view,model等をコピペしていてふと気づいたのですが、このcodeはサイト”Progate"さんの有料対象ですので公開の場に出していいのかと…。 本当は内容を見て確認して頂きたいのですが、勝手言って申し訳ないのですが今回はお気持ちだけ頂戴させて頂けないでしょうか? h_daidoさんは、スタートアップのエンジニアをされているベテランの方のようですね。 私は、webサイトを作りたくてプログラミングを始めてみました。そしたら、結構面白くハマってしまいました。 h_daidoさんの仰る通り基本は大事であると思います。そこで、全くの初学者に薦める勉強方法及び書籍等がありましたら教えて下さい。宜しくお願いします。 「なんでか、動かないな?」と思ったら、controllerで「put params」と書いてコンソールで確認する癖をつけとくと良いかもしれません。 >controllerのどこで書くかも分からないくらいのど素人です。
h_daido

2018/04/17 01:45 編集

確かにそのとおりですね!著作権に注意したほうがよいので、そのほうが得策かと思います。 私はベテランと呼べる域には到底到達していませんが、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」の場所や意味も自然と理解できると思います。
_nori_

2018/04/18 11:37

色々なアドバイスありがとうございます。 railsチュートリアルやってみる事にしました。少し内容を確認したところ、結構難しそうですが2、3周させるつもりで進めて行こうと思います。 railsチュートリアル は無料公開チュートリアルなので、今度行き詰まったときは具体的箇所について質問させて下さい。 本当にありがとございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問