如何在rails上的ruby中使用friendly_id从URL中删除模型名称

时间:2014-01-06 16:44:22

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

我有一个问题模型,允许用户添加问题。

我已经设置了Friendly_id,因此当用户添加问题时,网址为:

http://localhost:3000/questions/this-is-a-question

但是,我希望网址看起来像这样

http://localhost:3000/this-is-a-question

您对如何使用friendly_id有任何想法吗?

由于

更新:

这是我所讨论的friendly_id位.rb

extend FriendlyId
friendly_id :title, use: [:slugged, :finders]

def slug_candidates
[
  :title,
  [:title, :id]
]
end

def should_generate_new_friendly_id?
    new_record?
end 

4 个答案:

答案 0 :(得分:5)

在routes.rb

resources :questions, path: ''
注销时

会抛出错误。

尝试:

get '/:friendly_id', to: 'questions#show' 

答案 1 :(得分:2)

在routes.rb

中试试
resources :questions, path: ''

答案 2 :(得分:1)

在routes.rb

resources :questions, except: :show # Remove others you don't want

get ':id', to: 'questions#show', as: 'question'

如果您使用的是根级别ID,请确保使用friendly_id的保留字。此外,请确保将get ':id', to: 'questions#show', as: 'question'行保留在routes.rb的底部,以便其他所有内容都优先于其上方。这是一条危险的路线。

答案 3 :(得分:0)

您在routes.rb中想要的内容类似于以下内容:

get '/:id', to: 'posts#show', constraints: { id: /\d.+/ }
get '/:username', to: 'users#show'

从路由文档http://guides.rubyonrails.org/routing.html

中复制

如果问题名称被称为friendly_id,那么你想要的是:

get '/:friendly_id', to: 'questions#show'

并在controller show method中使用param[:friendly_id]