BlogsController#show中的NoMethodError

时间:2017-08-15 21:11:18

标签: ruby

我正在研究我的项目博客。我是使用Ruby on Rails的新手开发人员....

我安装了一个slug gem,然后为auth安装了devise gem。我认为这是一个auth错误,但我不知道究竟发生了什么。我可以在我的索引视图上显示帖子,但是当我尝试单击显示视图的链接时,它会显示此错误...请帮助!

以下是我的控制器,路线和型号......

我一直得到的错误是

  

BlogsController中的NoMethodError#show

case filter
  when Symbol
    lambda { |target, _, &blk| target.send filter, &blk }
  when String
    l = eval "lambda { |value| #{filter} }"
    lambda { |target, value| target.instance_exec(value, &l) }
......

我的控制器

class BlogsController < ApplicationController
  before_action :set_blog, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]

  def index
    @blog = Blog.all 
  end

  def new 
    @blog = Blog.new
  end 

  def create
    current_user.blogs.create(blog_params)
    redirect_to blogs_path
  end 

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

  def edit
    @blog = Blog.friendly.find(params[:id])
    if @blog.user != current_user
      return render text: 'Not Allowed', status: :forbidden
    end
  end

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

    if @blog.user != current_user
      return render text: 'Not Allowed', status: :forbidden
    end

    @blog.update_attributes(blog_params)
    redirect_to root_path
  end

  def destroy
    @blog = Blog.friendly.find(params[:id])
    if @blog.user != current_user
      return render text: 'Not Allowed', status: :forbidden
    end

    @blog.destroy
    redirect_to root_path
  end

private

  def blog_params
    params.require(:blog).permit(:name, :description)
  end
end

路线

Rails.application.routes.draw do
  devise_for :users
  resources :blogs
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root 'portfolio#index'

end

MODEL

class Blog < ApplicationRecord
  extend FriendlyId
  friendly_id :name, use: :slugged

  belongs_to :user
end

1 个答案:

答案 0 :(得分:0)

看起来您正在使用友好的id gem,请确保您根据gem自述文件正确配置了Blog模型并运行迁移以将slug字段包含到模型中。

此外,如果您之前没有slug的记录,请打开rails控制台并运行:

Blog.find_each(&:save)