【问题标题】:Custom Nested Routes自定义嵌套路由
【发布时间】:2011-12-29 20:49:42
【问题描述】:

我正在尝试根据用户名而不是 ID 获取自定义路由。我正在努力进入用户的显示页面,但我也在尝试嵌套资源,以便我可以使用相同的语法查看他的帖子和 cmets。

例子:

作品...“mysite.com/users/用户名/”

不起作用...“mysite.com/users/用户名/posts/”

routes.rb

...
# Users with the Username...
match 'users/:username' => "users#show" do
    get :posts
    get :comments
end

# Users with the ID...
resources :users do
    get :posts
    get :comments
end
...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    也许您可以使用to_param 方法并更新您的嵌套路由/资源:

    routes.rb:

    resources :users do
        resources :posts
        resources :comments
    end
    

    用户.rb

    class User < ActiveRecord::Base
      def to_param
       username
      end
    end
    

    ..for 在 UserController 中查找:

     @user = User.find_by_username(params[:id])
    

    (或根据用户名标准查找的任何变体)

    【讨论】:

    • 我以前见过这个解决方案。这似乎是一种 hack,它覆盖了内置的 find 方法,并可能导致一堆错误。在 rails 3.1 中必须有一种更简洁的方法来执行此操作。
    • 这不会以任何方式影响模型的 find 方法,所以我不确定可能导致什么错误。是的,您将不得不更改控制器中查找的标准以通过用户名查找,但我认为您无论如何都会这样做。这只会覆盖对象的 to_param 方法,这意味着 params[:id] 现在将是用户名。它还将使用用户名自动构建您的路线。我不确定它实际上如何变得更干净。如果您仍想使用控制器中参数中的数字 id,那就另当别论了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多