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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

6228閲覧

一覧ページから固有のidを取得するには【Ruby on Rails】

aiandrox

総合スコア52

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/12/31 09:54

編集2018/12/31 10:10

呟きに対していいねボタンを押すと、いいねカウントが上がるという機能をつけようと思っています。

コードとエラー文(一部省略)

index.html.erb

erb

1<%= @tweets.each do |tweet| %> 2 <%= tweet.text %> 3 <%= link_to "いいね", tweets_iine_path(tweet), class: 'btn btn-default' %> 4 <%= tweet.iine %> 5<% end %>

tweets_controller.rb

rb

1class TweetsController < ApplicationController 2 . 3 . 4 def iine 5 tweet = Tweet.find(params[:id]) # ※エラー箇所 6 if tweet.iine == nil 7 tweet.iine = 0 8 end 9 tweet.iine += 1 10 tweet.update 11 redirect_to root_path 12 end 13end

エラー文

ActiveRecord::RecordNotFound in TweetsController#iine
Couldn't find Tweet without an ID

わかっていること

params[:id]はshowビューなどのURLから値を取得するので、今回のようにindexから直接アクションに飛ぶ場合は値が取得できないのだと思います。
しかし、その場合どのような方法でデータの取得をすればいいのかわかりません。
初歩的な質問ですが、助言をお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんばんは。
私もRails初心者ですが回答させていただきます。

indexをrootに設定していてidの入力がまだないためエラーが出ているということですね。
それならば link_to の中で prams[:id]となるものを渡してあげるとどうでしょうか。

<%= link_to "いいね", {controller: 'tweets', action: 'line', id: tweet.id}, class: 'btn btn-default' %>

クラスは第3引数にするという決まりがあるのでコントローラーのアクション指定を{}でくくっています。

id: tweet.id という箇所でtweetのidをコントローラーに送っています。
いかがでしょうか?

それでは良いお年を^^

投稿2018/12/31 13:36

tailer

総合スコア62

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

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

aiandrox

2019/01/02 13:52

エラーになりました……。 ActiveRecord::RecordNotFound in TweetsController#show Couldn't find Tweet with 'id'=iine そして、iineアクションではなくshowアクションに飛んでいるみたいです。 routes.rbには以下のように書いています。 resources :tweets get 'tweets/iine', to: 'tweets#iine' いろいろと試してみましたが、エラーメッセージは変わらずです。タグとURLを以下に書いておきます。 <%= link_to "いいね", tweets_iine_path, id: tweet.id, class: 'btn btn-default' %> http://localhost:3000/tweets/iine <%= link_to "いいね", { controller: 'tweets', action: 'iine', id: tweet.id }, class: 'btn btn-default' %> http://localhost:3000/tweets/iine?id=15 <%= link_to "いいね", tweets_iine_path(@tweet), method: :get, class: 'btn btn-default' %> http://localhost:3000/tweets/iine
tailer

2019/01/02 18:08

こちらを試すとどうなりますか? ビューはそのままでコントローラーを下記のように編集する ``` tweet = Tweet.find(id: tweet.id) # ※エラー箇所 ```
aiandrox

2019/01/03 05:22

showアクションに飛んでしまうのは、routes.rbの記述の順番が原因でした。 resources :tweets get 'tweets/iine', to: 'tweets#iine' 値の方は、<%= link_to "いいね", {controller: 'tweets', action: 'line', id: tweet.id}, class: 'btn btn-default' %> と tweet = Tweet.find(params[:id]) で大丈夫でした。 うまくいってよかったです。丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問