【问题标题】:Customizing User Show Route in Rails在 Rails 中自定义用户显示路线
【发布时间】:2012-01-07 16:30:24
【问题描述】:

我想要,而不是 /user/:id 我希望默认用户路由是 /user:created_at 我能够让 /user:id 工作(没有第二个 /)但是当我尝试做 :created_at我收到一个错误。

有谁知道如何解决这个问题?此外,即使我有match 'users:id', :to => 'users#show', :as => :user, :via => :get /user/1 仍然是一个有效链接,因为我的 config/routes.rb 中有resources :users。有没有办法在rails编译resources :users时删除默认的/user/:id?

【问题讨论】:

  • 按照您的要求去做并不难,但是,created at 并不是资源的唯一标识符。如果可以,您应该考虑使用其他字段。
  • 哦,字段必须是唯一的?
  • 如果两个项目的创建时间相同;资源 /foo/:created_at 应该引用哪个项目?它没有必须是唯一的,但是,如果这些 url 代表一个单一的资源(而不是在此创建的所有项目的集合),则应该是唯一的。
  • 我同意@jdeseno 的观点。您需要 100% 确定您在路径中使用唯一 ID,因为这就是您查找记录的方式。您也可以始终将created_at 放在路径中,但它不应该是路径中的唯一 ID。

标签: ruby-on-rails devise routes


【解决方案1】:

如果我理解正确,您可以使用 to_param: http://apidock.com/rails/ActiveRecord/Base/to_param

所以如果你在你的用户模型中使用了

def to_param
   "#{first_name}_#{last_name}"
end

然后 user_path(@user) 将生成 /users/planet_pluto 例如

要防止 map.resources 生成路线,只需使用 :except

map.resources :user, :except => [:show]

希望对你有帮助

【讨论】:

  • 出于某种原因,这不会改变路线。
  • 如果你运行 rake 路由,你还能看到正在生成的 user#show 的路由吗?
  • 但是如果你定义了一个 to_param 方法,你的 :id 现在将是你在该方法中指定的任何东西,而不是默认的数据库 .id
  • 如何在视图中调用路径助手?它应该是 user_path(@user) 或类似的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多