首页 > 解决方案 > rails中未定义的方法“blog_path”

问题描述

我试图将现有项目从 sqlite3 基础更改为 postgresql 基础,但我遇到了最后一个错误,我不知道如何解决。

以下 html 文件中的 blog_path 启动未定义方法 'blog_path' 错误

<!DOCTYPE html>
<html>
    <head>
        <title>My Blog</title>
        <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
    </head>
    <body>
        <h1>My Blogs</h1>
        <div class="main">
            <div class="left-block">
            </div>
            <div class="blog-container">
                <% @blogs = @blogs.reverse %>
                <% @blogs.each do |blog| %>
                    <div class="blog">
                        <p class="title"><%= blog.title %></p>
                        <p class="time"><%= blog.created_at %></p>
                        <%= link_to 'Learn More', blog_path(blog), class: "btn btn-info" %>
                    </div>
                <% end %>
            </div>
            <div class="right-block">
            </div>
        </div>
        <footer>
            <%= link_to 'New Blog', '/blogs/new', class: "btn btn-primary" %>
        </footer>
    </body>
</html>

这是博客类

class Blog < ApplicationRecord
end

这是配置文件夹中的 route.rb

Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

  get '/blogs' => 'blogs#index'
  get '/blogs/new' => 'blogs#new'
  post '/blogs' => 'blogs#create'
  get '/blogs/:id' => 'blogs#show'
  get '/blogs/:id/edit' => 'blogs#edit'
  patch '/blogs/:id' => 'blogs#update'
  delete '/blogs/:id' => 'blogs#destroy'
end

这是 blogs_controller.rb

class BlogsController < ApplicationController
    def index
        @blogs = Blog.all
    end

    def new
        @blog = Blog.new
    end

    def create
        @blog = Blog.new(blog_params)
        if @blog.save
            redirect_to blogs_url
        else
            render 'new'
        end
    end

    def show
        @blog = Blog.find(params[:id])
    end

    def edit
        @blog = Blog.find(params[:id])
    end

    def update
        @blog = Blog.find(params[:id])
        @blog.update_attributes(blog_params)

        redirect_to blogs_url
    end

    def destroy
        @blog = Blog.find(params[:id])
        @blog.destroy
        redirect_to blogs_url
    end

    private
        def blog_params
            params.require(:blog).permit(:title, :content)
        end

end

**请让我知道是否需要任何其他资源来解决此问题。

标签: ruby-on-rails

解决方案


您应该resources :blogs在路线文件中使用,而不是单独定义每条路线

更多在这里http://guides.rubyonrails.org/routing.html


推荐阅读