【问题标题】:Rails routing of a controller's functions query控制器功能查询的 Rails 路由
【发布时间】:2011-02-18 23:41:09
【问题描述】:

所以我有一个用户控制器,并且它(除其他外)有一个名为 details 的函数。

这个想法是用户可以去 localhost:3000/user/:user_id/details 并能够查看:user_id的详细信息。

例如,我有一个名为“tester”的用户。 当我去uri时:http://localhost:3000/users/tester/details 我希望调用 details 函数,呈现详细信息视图,并为用户测试人员显示信息。

但是我得到一个错误提示

No action responded to tester. Actions: change_password, create, current_user, details, forgot_password, index, login_required, new, redirect_to_stored, show, and update_attributes

我理解这基本上意味着如果我想访问详细信息,我真的应该使用

http://localhost:3000/users/details

除了那也不是真的有效... >.http://localhost:3000/users/details/registries (这是我为任何试图查看 users/:user_id 的人规定的默认路径,所以再一次,这是我想要的方式)

要点是:任何人都可以帮助并告诉我如何才能获得 users/:user_id/details 以我希望的方式工作并显示 :user_id 的详细信息?

谢谢!

【问题讨论】:

    标签: ruby-on-rails routes


    【解决方案1】:

    你在使用资源吗?如果您的路线如下所示:

    map.resources :users
    

    你可以做到的:

    map.resources :users, :member => { :details => :get }
    

    这将允许对 URL /users/:id/details 的 GET 请求

    更多信息在这里:http://guides.rubyonrails.com/routing.html#customizing-resources

    【讨论】:

    • @Jty.tan:这个答案是更“传统”的做法,我认为它应该是公认的答案。
    • 嗯,好的。抱歉,我真的很难弄清楚其中的一些事情。我仍在努力思考路线的概念和不同请求的目的。现在关于上述内容,我是否可以假设这意味着在通过 get 请求时应该将 details 函数视为用户的成员?那么 :collection 是什么?我也不理解这方面的指南。
    • 嘿,Jty.tan,你会像上面的例子一样使用:member,它作用于特定的记录。 :collection 用于处理多条记录时。假设您有精选文章,您可能会转到map.resources :articles, :collection => { :featured => :get },然后您就可以点击网址/articles/featured。
    【解决方案2】:

    为了获得类似“users/:user_id/details”的路由,请在 routes.rb 中更改以下内容

    map.users 'users/:user_id/details', :controller => 'users', :action=>'details'
    

    【讨论】:

    • 谢谢!我还在学习这些东西,所以谢谢你的耐心! :D 也感谢 dylanfm!
    【解决方案3】:

    我认为您的问题在于以这种方式设置路由,而不是 :user_id,您在 url /users/tester 中使用 :login(或其他)而不是 /users/34。可能你应该看看to_param(1st example,2nd example,3rd example)。

    如果您想在路由中有另一个选项(除了默认的 REST 路由),如果您使用的是 map.resources(@dylanfm 回答),则可以添加 :member => {:details => :get},或者像在 @Salil 回答中那样映射它。

    【讨论】:

    • 哦,我已经设置了to_param,所以它给了我:login 而不是:user_id。 :)
    猜你喜欢
    • 2013-09-30
    • 2021-09-06
    • 2013-05-06
    • 2018-01-09
    • 2020-02-27
    • 2014-04-11
    • 2015-10-27
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多