ルートが正しく機能しない
概要
編集: 返信ありがとうございます。以下にリストされているすべてを試しましたが、まだ運が良くありません。 「localhosts/posts/new」と入力するとフォームが表示されますが、ナビゲーション バーをクリックしてもリンクが機能しません。コードを更新し、rake ルートの結果を含めました。
私は Ruby を初めて使用しており、チュートリアルを進めていますが、リンクの 1 つが機能せず、何が起こっているのかわかりません。
新しい投稿を作成するためのナビゲーション リンクが正しいページに移動しません。「posts_path」へのリンクをクリックしてもページが変わりません。
アドレス バーに /posts/new と入力すると新しい投稿を作成できますが、ナビゲーション バーの [新しい投稿] リンクをクリックしてもページが更新されません (URL には /posts が表示されます)。これを修正する方法はありますか?
config/routes.rb
Rails.application.routes.draw do
get 'sessions/new'
root 'static_pages#home'
get '/search', to: 'static_pages#search'
get '/login', to: 'sessions#new'
get '/posts', to: 'posts#new', as: 'new_post'
post '/login', to: 'sessions#create'
delete '/logout', to: 'sessions#destroy'
get '/signup', to: 'users#new'
get 'users/new'
get 'static_pages/home'
get 'posts/new'
get 'sessions/new'
resources :users
resources :account_activations, only: [:edit]
resources :password_resets, only: [:new, :create, :edit, :update]
resources :posts, only: [:new, :create, :destroy]
end
app/views/layouts/_header.html.erb
<header class="navbar navbar-fixed-top navbar-inverse">
<div class="container">
<% link_to "sample app", root_path, id: "logo" %>
<nav>
<ul class="nav navbar-nav navbar-right">
<li><%= link_to "Home", root_path %></li>
<li><%= link_to "Search", search_path %></li>
<% if logged_in? %>
<li><%= link_to "Users", users_path %></li>
<li><%= link_to "Posts", posts_new_path %></li>
<li class="dropdown">
<a href='#' class="dropdown-toggle" data-toggle="dropdown">Account <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><%= link_to "Profile", current_user %></li>
<li><%= link_to "Settings", edit_user_path(current_user) %></li>
<li class="divider"></li>
<li><%= link_to "Logout", logout_path, method: "delete" %></li>
</ul>
</li>
<% else %>
<li><%= link_to "Log in", login_path %></li>
<% end %>
</ul>
</nav>
</div>
post_controller.rb
class PostsController < ApplicationController
before_action :logged_in_user, only: [:create, :destroy]
before_action :correct_user, only: :destroy
def create
@post = current_user.posts.build(post_params)
if @post.save
flash[:success] = "Post created!"
redirect_to root_url
else
@feed_items = []
render 'static_pages/home'
end
end
def destroy
@post.destroy
flash[:success] = "Post Deleted"
redirect_to request.referrer || root_url
end
def new
@post = current_user.posts.build if logged_in?
end
private
def post_params
params.require(:post).permit(:description, :picture)
end
def correct_user
@post = current_user.posts.find_by(id:params[:id])
redirect_to root_url if @post.nil?
end
end
レーキルート:
password_resets_new GET /password_resets/new(.:format) password_resets#new
password_resets_edit GET /password_resets/edit(.:format) password_resets#edit
sessions_new GET /sessions/new(.:format) sessions#new
root GET / static_pages#home
search GET /search(.:format) static_pages#search
login GET /login(.:format) sessions#new
new_post GET /posts(.:format) posts#new
POST /login(.:format) sessions#create
logout DELETE /logout(.:format) sessions#destroy
signup GET /signup(.:format) users#new
users_new GET /users/new(.:format) users#new
static_pages_home GET /static_pages/home(.:format) static_pages#home
static_pages_about GET /static_pages/about(.:format) static_pages#about
static_pages_search GET /static_pages/search(.:format) static_pages#search
posts_new GET /posts/new(.:format) posts#new
GET /password_resets/new(.:format) password_resets#new
GET /password_resets/edit(.:format) password_resets#edit
GET /sessions/new(.:format) sessions#new
help GET /help(.:format) static_pages#help
about GET /about(.:format) static_pages#about
contact GET /contact(.:format) static_pages#contact
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
edit_account_activation GET /account_activations/:id/edit(.:format) account_activations#edit
password_resets POST /password_resets(.:format) password_resets#create
new_password_reset GET /password_resets/new(.:format) password_resets#new
edit_password_reset GET /password_resets/:id/edit(.:format) password_resets#edit
password_reset PATCH /password_resets/:id(.:format) password_resets#update
PUT /password_resets/:id(.:format) password_resets#update
posts POST /posts(.:format) posts#create
GET /posts/new(.:format) posts#new
post DELETE /posts/:id(.:format) posts#destroy
解決策
get ‘sessions/new’ と get ‘/posts’ を削除して、‘posts#new’ を ‘new_post’ に変更します。
サーバーを再起動します
link_to “Posts”、new_post_path、method: :post を試してください。
うまくいくはずです