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

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

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

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

Ruby

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

Ruby on Rails 3

Ruby on Rails3はRubyによって書かれたオープンソースのウェブフレームワークです。Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Ruby on Rails

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

Q&A

解決済

2回答

5423閲覧

link_toでフォロワー一覧ページに遷移したいのですが、困っています・・・

k_yusuke

総合スコア19

Ruby on Rails 5

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

Ruby

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

Ruby on Rails 3

Ruby on Rails3はRubyによって書かれたオープンソースのウェブフレームワークです。Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/08/06 07:09

前提・実現したいこと

いつもお世話になっております。今回もよろしくお願いします
app/views/users/show.html.haml上段のlink_toからapp/views/users/follow.html.haml(フォロー中ユーザー・フォロワーを表示するページ)に遷移したいです。
= link_to(@user.followings.count,followings_user_path(@user.id))のように書いたのですが、'/users/1/followers'のようなstringのキーは存在しませんと怒られます。
この場合は、、'/users/1/followers'が文字列として認識されているということなんでしょうか?お知恵をお貸しいただけると幸いです。

エラーメッセージ

NoMethodError in Users#show
Showing /home/ec2-user/environment/new_app2/app/views/users/show.html.haml where line #9 raised:

undefined method `stringify_keys' for "/users/1/followers":String

Parameters:{"id"=>"1"}

Started GET "/tours/1" for 160.15.13.173 at 2019-08-06 06:42:01 +0000 Cannot render console from 160.15.13.173! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC Processing by ToursController#show as HTML Parameters: {"id"=>"1"} User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 91], ["LIMIT", 1]] Tour Load (0.1ms) SELECT "tours".* FROM "tours" WHERE "tours"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] Rendering tours/show.html.haml within layouts/application User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] (0.2ms) SELECT COUNT(*) FROM "likes" WHERE "likes"."tour_id" = ? [["tour_id", 1]] Like Load (0.1ms) SELECT "likes".* FROM "likes" WHERE "likes"."user_id" = ? AND "likes"."tour_id" = ? LIMIT ? [["user_id", 91], ["tour_id", 1], ["LIMIT", 1]] Rendered likes/_likes_box.html.haml (7.1ms) Comment Load (0.2ms) SELECT "comments".* FROM "comments" WHERE "comments"."tour_id" = ? [["tour_id", 1]] Rendered comments/_index.html.haml (11.4ms) Rendered comments/_form.html.haml (13.3ms) Tour Exists (0.2ms) SELECT 1 AS one FROM "tours" INNER JOIN "favorites" ON "tours"."id" = "favorites"."tour_id" WHERE "favorites"."user_id" = ? AND "tours"."id" = ? LIMIT ? [["user_id", 91], ["id", 1], ["LIMIT", 1]] Rendered favorites/_favorites_form.html.haml (42.0ms) Rendered tours/show.html.haml within layouts/application (108.5ms) Rendered layouts/_head.html.haml (634.5ms) Rendered shared/_search_form.html.haml (1.5ms) Rendered layouts/_header.html.haml (10.3ms) Rendered layouts/_flash.html.haml (1.2ms) Completed 200 OK in 853ms (Views: 766.5ms | ActiveRecord: 3.7ms) Started GET "/users/1" for 160.15.13.173 at 2019-08-06 06:42:04 +0000 Cannot render console from 160.15.13.173! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by UsersController#show as HTML Parameters: {"id"=>"1"} User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 91], ["LIMIT", 1]] User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] Rendering users/show.html.haml within layouts/application (0.1ms) SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follow_id" WHERE "relationships"."user_id" = ? [["user_id", 1]] (0.1ms) SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."user_id" WHERE "relationships"."follow_id" = ? [["follow_id", 1]] Rendered users/show.html.haml within layouts/application (14.7ms) Completed 500 Internal Server Error in 20ms (ActiveRecord: 0.7ms) ActionView::Template::Error (undefined method `stringify_keys' for "/users/1/followers":String): 6: = link_to(@user.followings.count,followings_user_path(@user.id)) 7: %p 8: フォロワー: 9: = link_to(@user.followers.count,root_path,followers_user_path(@user.id)) 10: = render('relationships/follow_form',user: @user) 11: -@tours.each do |tour| 12: .card.my-1 app/views/users/show.html.haml:9:in `_app_views_users_show_html_haml___2615651576268760598_78742120'

app/config/routes.rb

ruby

1Rails.application.routes.draw do 2 3 4 5 resources :users, :only => [:show,:follow] 6 resources :tours, :only => [:index,:new,:create,:show, 7 :edit,:update,:destroy] 8 resources :relationships, only: [:create, :destroy] 9 10 resources :users do 11 member do 12 get :followings, :followers 13 end 14 end 15 resources :tours do 16 resources :likes, :only => [:create,:destroy] 17 resources :favorites, only: [:create, :destroy] 18 resources :comments, :only => [:create,:destroy] 19 end 20 21end 22

app/views/users/show.html.haml

ruby

1%h2.page_title.mb-2 2 =@user.username 3 のページ 4%p 5 フォロー: 6= link_to(@user.followings.count,followings_user_path(@user.id)) 7%p 8 フォロワー: 9= link_to(@user.followers.count,root_path,followers_user_path(@user.id)) 10= render('relationships/follow_form',user: @user) 11-@tours.each do |tour| 12 .card.my-1 13 .card-body 14 %h4.card-title 15 %smallタイトル: 16 #{tour.tourname} 17 %h6.card-subtitle.mb-2.text-muted 18 %small製作者: 19 =link_to(tour.user.username,user_path(tour.user.id)) 20 %p.card-text 21 = truncate(tour.tourcontent,separator: '.',lendth:40) do 22 =link_to("続きを読む",tour_path(tour.id)) 23 24 25 = link_to "詳細",tour_path(tour.id),class:"card-link" 26 -if current_user == tour.user 27 = link_to "編集",edit_tour_path,class:"card-link" 28 = link_to "削除","/tours/#{tour.id}",class:"card-link",method: :delete

app/views/users/follow.html.haml

ruby

1- provide(:title, @title) 2.row 3 %aside.col-md-4 4 %section.user_info 5 %h1= @user.usernamename 6 %span= link_to "view my profile", @user 7 %span 8 %b Tours: 9 = @user.tours.count 10 %section.stats 11 - if @users.any? 12 .user_avatars 13 - @users.each do |user| 14 = user.username 15 = user.created_at 16 .col-md-8 17 %h3= @title 18 - if @users.any? 19 %ul.users.follow 20 = render @users 21 = paginate @users 22

app/controller/users_controller.rb

ruby

1class UsersController < ApplicationController 2before_action:check_user_login?, only:[:show] 3 def show 4 @user=User.find_by(id: params[:id]) 5 @tours=Tour.where(user_id: @user.id) 6 end 7 8 def following 9 @title = "Following" 10 @user = User.find(params[:id]) 11 @users = @user.following.page(params[:page]) 12 render 'follow' 13 end 14 15 def followers 16 @title = "Followers" 17 @user = User.find(params[:id]) 18 @users = @user.followers.page(params[:page]) 19 render 'follow' 20 end 21end

ruby

1class User < ApplicationRecord 2 3has_many :tours, dependent: :destroy 4has_many :comments, dependent: :destroy 5has_many :likes, dependent: :destroy 6has_many :liked_tours, through: :likes, source: :tour 7has_many :favorites 8has_many :favtours, through: :favorites, source: :tour 9has_many :relationships 10has_many :followings, through: :relationships, source: :follow 11has_many :reverse_of_relationships, class_name: 'Relationship', foreign_key: 'follow_id' 12has_many :followers, through: :reverse_of_relationships, source: :user 13 14 15 def follow(other_user) 16 unless self == other_user 17 self.relationships.find_or_create_by(follow_id: other_user.id) 18 end 19 end 20 21 def unfollow(other_user) 22 relationship = self.relationships.find_by(follow_id: other_user.id) 23 relationship.destroy if relationship 24 end 25 26 def following?(other_user) 27 self.followings.include?(other_user) 28 end 29 30 31

rails routes

Prefix Verb URI Pattern Controller#Action RailsAdmin::Engine

followings_user GET /users/:id/followings(.:format) users#followings
followers_user GET /users/:id/followers(.:format) users#followers
user GET /users/:id(.:format) users#show

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

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

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

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

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

guest

回答2

0

エラーメッセージをよく読みましょう。

app/views/users/show.html.haml:9

9行目です。

ActionView::Template::Error (undefined method `stringify_keys' for "/users/1/followers":String): 6: = link_to(@user.followings.count,followings_user_path(@user.id)) 7: %p 8: フォロワー: 9: = link_to(@user.followers.count,root_path,followers_user_path(@user.id)) 10: = render('relationships/follow_form',user: @user) 11: -@tours.each do |tour| 12: .card.my-1

質問に書いた行は6行目ですね。9行目の引数の数を確認してみてください。

投稿2019/08/06 07:14

mather

総合スコア6759

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

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

k_yusuke

2019/08/06 08:11

matherさん回答ありがとうございます... おっしゃる通り9行目のroot_pathが要りませんでした。。 エラーをきちんと読まないまま質問をしてしまいました。本当にすみません! 助かりました!!!
guest

0

ベストアンサー

※削除した質問となにか変わってます?

フォロワーのほうのlink_toの第二引数、root_pathが要らないのでは。

フォロワー: = link_to(@user.followers.count,root_path,followers_user_path(@user.id))

投稿2019/08/06 07:13

hellomartha

総合スコア329

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

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

k_yusuke

2019/08/06 08:09

hellomarthaさん回答ありがとうございます... おっしゃる通り第二引数を除いたところ問題なく実装できました。 教えていただき感謝の限りです! エラーにもちゃんと書いてあったのになぜ気が付かなかったのか自分でも不思議です・・・ 回答ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問