在没有控制器名称的URL中显示用户名

时间:2013-06-01 18:13:41

标签: ruby-on-rails ruby routes url-routing

希望大家今天早上好。最近一直在学铁路,并一直致力于一个小的“社交”应用程序进行练习。我环顾四周寻找一个好的答案,但找不到合适的东西给我。这就是我现在想要解决的问题:

默认情况下,网址为hi.com/user/12,到目前为止,我已将其更改为/ user / name。一切都很好。但是,当然,我想更进一步,做hi.com/name(主要是因为我想了解它是如何正确完成的)。

这是我的(缩写)路线:

resources :users do
  member do
    get :following, :followers
  end
end

root to: 'pages#home'

match '/help',    to: 'pages#help'
match '/about',   to: 'pages#about'
match '/contact', to: 'pages#contact'

match '/signup',  to: 'users#new'
match '/signin',  to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete

以下是控制器的显示视图:

def show
  @user = User.find_by_username(params[:id])
  @tweets = @user.tweets.paginate(page: params[:page])
end

现在我尝试过将match ':username', to: 'users#show'粘贴到我的路线中,然后将控制器中的find_by_username(params[:id])更改为find_by_username(params[:username])。这实际上非常有效,并在hi.com/name上显示所有正确的用户信息。以下和关注者仍然(按预期)在用户/名称/跟随(并且他们工作正常)。但是,所有静态页面都会中断,包括/ signout(有点重要:p),而/ users仍显示所有用户的索引,用户/名称会抛出错误(如果/ name有效,那么我就不需要/ users /无论如何名字)。错误是用户控制器中的未定义方法`推文'为nil:NilClass

我想要完成的是hi.com/username和hi.com/username/following等。还需要我的静态页面仍然可以工作。我有一切与/ users / name一起工作,但我想学习如何让它以这种方式工作。

谢谢大家,我很感激!

1 个答案:

答案 0 :(得分:0)

基本上,它很容易,但它有副作用。

只需在routes.rb

的末尾添加即可
get '/:id', to: 'user#show'

但是,名为aboutuserspages的用户将无法查看其个人资料,因为该路径已在routes.rb中使用。