0

根据此处的示例,我一直在尝试为用户配置文件实现一个虚 url:Rails 3: Permalink public profile。我已将“id”替换为用户名:

  def to_param
    username
  end

但是,这导致我的其他路线出现问题。我已经设置它们,以便它们在运行“rake 路由”时完全匹配默认的路由集。

  get '/users/' => 'users#index', :as => :users
  post '/users' => 'users#create'
  get '/users/new' => 'users#new', :as => :new_user
  get '/users/:id/edit' => 'users#edit', :as => :edit_user
  patch '/users/:id' => 'users#update'
  put '/users/:id' => 'users#update'
  delete '/users/:id' => 'users#destroy'

  # for vanity url
  get '/:id' => 'users#show', :as => :user

使用此设置,尝试访问删除和更新路由会给我“无路由匹配”错误。指定这些的正确方法是什么,和/或我应该以不同的方式这样做?任何帮助表示赞赏。

4

1 回答 1

1

我认为将resources语法保留在 中是有趣且更具可读性的routes.rb,除了show,您可以重写以自定义user_path

resources :users, :except => [:show]

# 2 possibilities for the show url    
get '/users/:id' => 'users#show'   # can be removed if you don't want to keep /users/:id url
get '/:id' => 'users#show', :as => :user

但是将控制器更改为通过username而不是来查找用户id,例如

def show
  @post = Post.find_by_username(params[:id])   # instead of Post.find(params[:id])
  # ...
end
于 2013-06-08T15:22:48.433 回答