0

希望大家今天早上都好。最近一直在学习 rails,并且一直在开发一个小的“社交”应用程序来练习。我四处寻找一个好的答案,但找不到适合我的东西。这是我现在想要弄清楚的:

默认情况下,url 是 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 仍然显示所有用户的索引,但 users/name 会引发错误(如果 /name 有效,那么我不需要 /users/无论如何命名)。错误是用户控制器中 nil:NilClass 的未定义方法“推文” 。

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

谢谢大家,我很感激!

4

1 回答 1

0

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

只需在您的末尾添加routes.rb

get '/:id', to: 'user#show'

但是,名为aboutusers的用户pages将无法看到他们的个人资料,因为该路径在您的routes.rb.

于 2013-06-01T18:20:11.233 回答