通过 Friendly_Id Gem 在 URL 中使用 Slug 和 id

Posted

技术标签:

【中文标题】通过 Friendly_Id Gem 在 URL 中使用 Slug 和 id【英文标题】:Use Slug and id in URL with Friendly_Id Gem 【发布时间】:2014-03-19 02:46:30 【问题描述】:

我正在使用 Friendly_id gem 来创建 Clean URL,它工作得很好,但是我想要一个像 http://localhost:3000/profile/1/jack-sparo 这样的 URL,而不是像这样的 URL 1user_id,所以怎么能我做吗?

这是我的配置/路线

  get "profiles/show" 

  get '/profile/:id' => 'profiles#show', :as => :profile
  get 'profiles' => 'profiles#index'

这是我的个人资料控制器

def show
    @user= User.find_by_slug(params[:id])
    if @user
        @posts= Post.all
        render action: :show
    else
        render file: 'public/404', status: 404, formats: [:html]
    end
  end

【问题讨论】:

【参考方案1】:

我认为这是可行的:

# change in config/routes.rb
get '/profile/:id(/:username)' => 'profiles#show', :as => :profile

# change in app/controllers/profile_controller.rb
@user= User.find(params[:id])

# add to app/models/user.rb
def to_param
  "#id/#username"
end

其中username 是friendly_id 用来生成slug 的任何东西

【讨论】:

以上是关于通过 Friendly_Id Gem 在 URL 中使用 Slug 和 id的主要内容,如果未能解决你的问题,请参考以下文章

Rails gem“friendly_id”:如何在创建对象之前获得 slug 的实时预览

rails 使用 friendly_id gem 按资源名称路由访问

如何配置friendly_id gem的序列分隔符

更新时删除旧的friendly_id gem slug [关闭]

导轨/Friendly_id。如何为旧的(丑陋的)URL 呈现 404 页面

使用 friendly_id 为具有可标记行为的标签创建 URL slug