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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

1610閲覧

マイページから遷移する場合のみヘッダーの投稿画面が開かない

_tonton_

総合スコア4

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/27 05:50

前提・実現したいこと

headerに新規投稿ボタンを表示していますが、
マイページから遷移する場合のみ、新規投稿画面が開きません。
投稿ボタンはviews/layouts/application.html.hamlにあり、
userログイン機能にはdeviseを使用しています。

発生している問題・エラーメッセージ

Routing Error No route matches [GET] "/users/posts/new"

該当のソースコード

  • views/layouts/application.html.haml

ruby

1!!! 2%html 3 %head 4 %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/ 5 %title AnimalSearch 6 = csrf_meta_tags 7 = csp_meta_tag 8 = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' 9 = javascript_include_tag 'application' 10 %link{ :href => 'https://fonts.googleapis.com/css?family=Londrina+Shadow', rel: 'stylesheet' } 11 %body 12 .menu 13 .header 14 .main-title 15 %a{ href: "/", class: "main-title__logo"} 16 Animal Search 17 .user-management 18 - if user_signed_in? 19 .post__btn__text 20 投稿する 21 = icon('far', 'hand-point-right') 22 = link_to "posts/new", class: "post__btn" do 23 = icon('fas', 'camera') 24 = link_to "マイページ", "/users/#{current_user.id}",class: "logout" 25 = link_to "ログアウト", "/users/sign_out", class: "logout", method: :delete 26 - else 27 = link_to "ログイン", "/users/sign_in", class: "post" 28 = link_to "新規登録", "/users/sign_up", class: "post" 29 = render 'layouts/notifications' 30 = yield
  • routes.rb

ruby

1Rails.application.routes.draw do 2 devise_for :users do 3 delete "/users/sign_out" => "devise/sessions#destroy" 4 get "/users/sign_in" => "devise/sesions#new" 5 get "/users/sign_up" => "devise/registrations#new" 6 end 7 root "posts#index" 8 resources :posts do 9 resources :comments, only: :create 10 collection do 11 get 'search' 12 end 13 end 14 resources :users, only: [:new, :show, :create] 15 resources :categories, only: [:show, :index] 16 resources :areas, only: [:show, :index] 17end
  • users_controller.rb

ruby

1class UsersController < ApplicationController 2 3 def new 4 @users = User.all 5 end 6 7 def show 8 @user = User.find(params[:id]) 9 @posts = current_user.posts.order("created_at DESC") 10 end 11 12 def create 13 @user = User.new(user_params) 14 if @user.save 15 redirect_to "/" 16 else 17 render :new 18 end 19 end 20 21 private 22 23 def user_params 24 params.require(:user).permit(:nickname, :email, :password, :password_confirmation) 25 end 26 27end 28

他のページでは正常にページ遷移ができます。
ルーティングに追記が必要でしょうか?

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

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

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

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

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

guest

回答2

0

= link_to "posts/new", class: "post__btn" do

の行
"posts/new"
だから"/users/posts/new"

new_post_path
に変更して

= link_to new_post_path, class: "post__btn" do

でどうですか

投稿2020/08/27 06:00

naokit-dev

総合スコア424

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

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

_tonton_

2020/08/27 06:10

ご回答ありがとうございました! 無事に解決できました! 一足先にご回答頂いた方がいらっしゃいましたので、 高評価押させていただきました。
guest

0

ベストアンサー

link_to "posts/new"としている以上、開いたページからの相対パスとなっています。

link_to "/posts/new"と絶対パスにするか、link_to new_post_pathのようにヘルパーを使いましょう。

投稿2020/08/27 05:57

maisumakun

総合スコア146018

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

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

no1knows

2020/08/27 06:08

/の有無で相対パスかどうかが変わるとは・・・いつも勉強になります!
_tonton_

2020/08/27 06:09

ご回答ありがとうございました! 無事解決できました。 今後はヘルパーを使用する事にします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問