Rails Friendly Id - 无法找到id = electronics的类别

时间:2013-12-01 17:18:59

标签: ruby-on-rails ruby ruby-on-rails-4 friendly-id

我正在尝试在Ruby on Rails 4.0中开发一个应用程序(已经使用过这个令人难以置信的框架的旧版本)并且我遇到了一些麻烦。

我安装了FriendlyID gem,我觉得一切都还可以,但是当我尝试测试我的应用时,我收到了错误。

如果我转到http://0.0.0.0:3000/categories/1,这可行。但是,当我点击此页面中的“编辑”,或者只是转到http://0.0.0.0:3000/categories/electronics(这是ID为1的类别的标题名称)时,我收到以下错误:

Couldn't find Category with id=electronics
# Use callbacks to share common setup or constraints between actions.
def set_category
   @category = Category.find(params[:id])  #Here's pointed the error
end

类别型号:

class Category < ActiveRecord::Base 

    extend FriendlyId
    friendly_id :name, use: :slugged

    # Validations
    validates_uniqueness_of :name, :case_sensitive => false

end

类别控制器:

(由脚手架生成用于测试目的)

class CategoriesController < ApplicationController
  before_action :set_category, only: [:show, :edit, :update, :destroy]

  # GET /categories
  # GET /categories.json
  def index
    @categories = Category.all
  end

  # GET /categories/1
  # GET /categories/1.json
  def show
  end

  # GET /categories/new
  def new
    @category = Category.new
  end

  # GET /categories/1/edit
  def edit
  end

  # POST /categories
  # POST /categories.json
  def create
    @category = Category.new(category_params)

    respond_to do |format|
      if @category.save
        format.html { redirect_to @category, notice: 'Category was successfully created.' }
        format.json { render action: 'show', status: :created, location: @category }
      else
        format.html { render action: 'new' }
        format.json { render json: @category.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /categories/1
  # PATCH/PUT /categories/1.json
  def update
    respond_to do |format|
      if @category.update(category_params)
        format.html { redirect_to @category, notice: 'Category was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @category.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /categories/1
  # DELETE /categories/1.json
  def destroy
    @category.destroy
    respond_to do |format|
      format.html { redirect_to categories_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_category
      @category = Category.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def category_params
      params.require(:category).permit(:name)
    end
end

迁移:##

(我在创建Category表后添加了friendlyId,但我认为没问题)

class AddColumnToCategory < ActiveRecord::Migration
  def change
    add_column :categories, :slug, :string
    add_index :categories, :slug, unique: true
  end
end

路线:

resources :categories
希望你能帮助我。 我在Rails 4.0中做错了什么?

2 个答案:

答案 0 :(得分:29)

Check the doc,友好ID停止了攻击find方法(为了更大的利益),您现在必须这样做:

# Change Category.find to Category.friendly.find in your controller
Category.friendly.find(params[:id])

答案 1 :(得分:12)

您现在可以使用:

extend FriendlyId friendly_id :name, use: [:finders]

在您的模型中。