我正在使用Friendly id来允许我的Rails应用中的用户名自定义查询。
所以说用户的用户名是loremipsum
rails会显示此http://localhost:3000/users/loremipsum
,这非常正常
但请说用户的用户名为lorem.ipsum
或lorem-ipsum
如何在网址中显示导轨lorem.ipsum
或lorem-ipsum
,因为它目前占据第一部分,然后说Couldn't find User with id=lorem
我的用户控制器
class UsersController < ApplicationController
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @movies }
end
end
def search
@movies = @search.result
respond_to do |format|
format.html # index.html.erb
format.json { render json: @movies }
end
end
def show
@user = User.find(params[:id])
@movies = @search.result
end
def sign_up
@user = User.new
end
def sign_in
end
def create
@user = User.create( params[:user] )
if @user.save
sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
def edit
@user = @current_user
end
def update
if @user.update_attributes(params[:user])
sign_in @user
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "User destroyed"
redirect_to users_path
end
def edit
end
end
答案 0 :(得分:0)
使用slug来处理它,你应该能够在模型上定义它:
class User < ActiveRecord::Base
extend FriendlyId
friendly_id :username, use: :slugged
def normalize_friendly_id(string)
super.upcase.gsub("-", ".")
end
end
参考:customizing friendly_id slugs
将控制器中的User.find
更改为User.friendly.find
User.friendly.find(params[:id])
答案 1 :(得分:0)
这更有可能是路由问题,因为rails以lorem
和params[:id]
格式传递ipsum
。
https://stackoverflow.com/a/7781314/308701解释了如何禁用此功能,但需要注意的是,您无法请求其他格式,例如xml
,json
等等。