【发布时间】:2016-10-19 10:17:14
【问题描述】:
我已经完成了 Hartl 的教程,并正在尝试以与 twitter 相同的方式为我的 twitter 克隆创建虚 URL,例如www.twitter.com/realDonaldTrump
我已经设法让我的网址看起来像 /users/:slug。 想知道 - 我如何得到它,所以它只是 /:slug?
这是我到目前为止所做的:
1.在我的用户模型中,没有“用户名”列,所以我改用“名称”。
2.生成新的迁移以将 slug 列添加到用户模型数据库。
3.插入 Rails 控制台,通过键入以下内容为所有用户添加 slug:
User.all.each do |user|
user.slug = user.name.downcase.parameterize
user.save
end
4.Configured UsersController 显示动作到:
def show
@user = User.find_by_slug(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
redirect_to root_url and return unless @user.activated?
end
现在我已经对其进行了配置,使其显示 /users/:slug,我该如何更改它使其只是 /:slug?
【问题讨论】:
-
把路由改成
get '/:id', to: 'users#show' -
这似乎可行,例如,我可以访问个人资料页面 /chloe-schamberger。但现在我无法访问我的任何其他页面。我得到一个错误: undefined method `microposts' for nil:NilClass def show @user = User.find_by_slug(params[:id]) @microposts = @user.microposts.paginate(page: params[:page]) redirect_to root_url 和除非@user.activated 否则返回?结束
-
似乎每当我访问集合页面时,例如 /users、/help、/about,路由都认为 :id = users。我该如何解决这个问题?
-
最后放
get '/:slug', to: 'users#show'这条路线。
标签: ruby-on-rails