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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

解決済

1回答

837閲覧

いいね機能の実装におけるルーティングの書き方

Ponimaru

総合スコア6

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

0グッド

0クリップ

投稿2020/06/16 07:56

編集2020/06/16 09:50

前提・実現したいこと

いいねを押すと適切な投稿のIDを取得し、データに保存したい。

わからないこと

一覧ページにおけるreview_idの取得の仕方

一覧ページの投稿に対していいねをする時、その投稿のidを含めてデータに保存する方法

ルーティングにおけるコードの書き方 ー
like と review がルーティングで独立してるのは気がついているのですが、
できれば resources を使いたいと考えています。
それが不可ならuriパターンでの指定を教えていただけると幸いです。

該当のソースコード

ruby

1class LikesController < ApplicationController 2 def create 3 @like = Like.new(user_id: current_user.id, review_id: id) 4 @like.save 5 redirect_to reviews_path 6 end 7end

ruby

1Rails.application.routes.draw do 2 root to: 'static_pages#home' 3 devise_for :users 4 resources :reviews, only: [:index, :new, :create, :show] 5 resources :likes, only: [:create, :destroy] 6end

ruby

1class ReviewsController < ApplicationController 2 before_action :authenticate_user! 3 before_action :move_to_signin 4 5 def index 6 @reviews = Review.all 7 end 8 9 def new 10 @review = Review.new 11 end 12 13 def create 14 @review = Review.new(review_params) 15 if @review.save 16 redirect_to reviews_path 17 else 18 render :new 19 end 20 end 21 22 def show 23 @review = Review.find_by(id: params[:id]) 24 end 25 26 private 27 def review_params 28 params.require(:review).permit(:title, :content, :image).merge(user_id: current_user.id) 29 end 30end

haml

1-# index.html.haml 2%h1 Reviews#index 3- @reviews.each do |review| 4 .Cover 5 = link_to review_path(review) do 6 = image_tag "#{review.image}" 7 = link_to('いいね', reviews_path, method: :post) 8= link_to('review', new_review_path) 9= link_to('logout', destroy_user_session_path, method: :delete)

試したこと

ルーティングのネストを変える

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

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

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

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

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

winterboum

2020/06/16 09:04

関係の有るところが消されてるんで、、、、 載っているhamlは一覧のですか? その link_to を含むloopは載せてください。全部載る方が本当は良いのですが。 その一覧を書き出すaction indexだとおもいますが、それも必要です。 ソース全体を知っているあなたが、どこが悪いのかがわからないのですから、どこが必要でどこが不要か正しく判断出来ると思いますか?
Ponimaru

2020/06/16 09:22

修正しました! これで該当のファイルにおける省略はありませんが、解決のため必要なファイルがあればいつでもおっしゃってください!
guest

回答1

0

ベストアンサー

なる。
ReviewとPostとLike(とUser)モデルがあると思います。
それらの 関連定義が載っているともっと確実になります。
が、
それらは極普通の関連があってごく普通に定義が書かれているという前提で書きます。

ReviewのcontrollerでReviewの一覧をだすとすると、それはいろいろなPostに対する色々なUserのreviewがまぜこぜに表示されるということですね?
それにはちょっと違和感がありますが、ま良いとして

一覧ページにおけるpost_idの取得の仕方

- @reviews.each do |review| の中でしたら review.post_id
###一覧ページの投稿に対していいねをする時、その投稿のidを含めてデータに保存する方法
「一覧ページ」というのがReviewの一覧のことで、「その投稿のid」とは「そのreviewがどのPostに対してのレビューなのかそのpostのid」のことでしょうか?するとlink_to('いいね', reviews_path, method: :post)ここだと思いますが。これですと Reviewの一覧にpostで行くことになるので、多分ルーティングがない、というエラーですね。
新しいrouteを定義しないと行けないです。そのviewが表示できているということはresources :reviews doがあると思うので、その中に

member do post :like

とするとlink_to('いいね', like_review_path, method: :post)
で、params[:id] にreviewのidが渡ってきますから、それからreviewを得てpost_id = review.post_idで「その投稿のid」が得られます。

###ルーティングにおけるコードの書き方
ん? ReviewsController  でindex表示できているのだからもう作ってあるのではない?
config/routes.rbを載せてください。

投稿2020/06/16 09:47

winterboum

総合スコア23284

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

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

Ponimaru

2020/06/16 10:01

すいません! 編集にミスがありました。 モデルはuser, review, likeの三つしかなく、postというのは編集前に便宜上利用したreviewの代わりの名称です。 つまり、投稿=レビューです。 それから一覧を表示させようとするときにエラーが発生します。 以下rails routes reviews GET /reviews(.:format) reviews#index POST /reviews(.:format) reviews#create new_review GET /reviews/new(.:format) reviews#new review GET /reviews/:id(.:format) reviews#show likes POST /likes(.:format) likes#create like DELETE /likes/:id(.:format) likes#destroy
winterboum

2020/06/16 10:08

どんなエラーか載せましょう。 モデルの関連定義のところも載せてください。 routsはコメントだとベタになって読みにくいので、質問の方に移してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問