ruby-on-rails - Rails Friendly Id - 找不到 id=electronics 的类别

标签 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

类别 Controller :

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

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 中做错了什么?

最佳答案

Check the doc , friendly id stopped hacking find 方法(为了更大的利益),你现在必须做的:

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

关于ruby-on-rails - Rails Friendly Id - 找不到 id=electronics 的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20314927/

相关文章:

ruby-on-rails - haml 的代码覆盖工具?

postgresql - 如何分组/选择 JSON 类型列(PG::UndefinedFunction: ERROR: could not identify an equality operator for type json)

ruby-on-rails - 如何将http请求的文件(xml)存储到对象中?

Ruby File.read 与 File.gets

ruby - 如何在 ruby​​ 回溯中获取源和变量值?

javascript - Rails4、Turbolinks 和 select2 : Object [object Object] has no method 'select2'

ruby-on-rails - 通过代理运行 Web 请求时如何设置 use_ssl 参数?

ruby-on-rails - 为什么没有在 XHR 请求上设置设计 cookie?

ruby-on-rails - rails : How do I use hidden_field in a form_for?

ruby-on-rails - 为什么更新模型文件时需要重启服务器?