【问题标题】:Rails Friendly id FullstopsRails 友好的 id 句号
【发布时间】:2013-05-28 12:55:57
【问题描述】:

我在我的 Rails 应用程序中使用 Friendly id 允许从用户名进行自定义查询。

假设用户的用户名是loremipsum

rails 会显示这个http://localhost:3000/users/loremipsum,而且效果很好

但是说用户的用户名是lorem.ipsumlorem-ipsum

我怎样才能让rails在url中显示lorem.ipsumlorem-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

【问题讨论】:

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


    【解决方案1】:

    使用 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])
    

    Quick Start Using Friendly_id

    【讨论】:

    • 您是否在您的用户模型上添加了 slug (slug:string) 属性?
    • 是的,我有 rails g migration add_slug_to_users slug:string
    • 好的,添加到问题中
    • 现在我为#<0x007fb15bfa20a8>
    • &gt;
    【解决方案2】:

    这更可能是路由问题,因为 rails 以 loremipsum 格式通过 lorem

    https://stackoverflow.com/a/7781314/308701 解释了如何禁用此功能,但需要注意的是您将无法请求其他格式,例如 xmljson 等...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 2013-07-19
      • 2014-03-17
      • 2016-08-17
      • 2016-04-16
      相关资源
      最近更新 更多