我正试图在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移徙:
(我在创建类别表之后添加了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中做错了什么?
发布于 2013-12-01 17:25:44
查查医生,友好的id停止了对find方法的黑客攻击(为了更大的好处),您现在必须这样做:
# Change Category.find to Category.friendly.find in your controller
Category.friendly.find(params[:id])发布于 2015-04-21 09:19:22
您现在可以使用:
extend FriendlyId friendly_id :name, use: [:finders]
在你的模型里。
https://stackoverflow.com/questions/20314927
复制相似问题