【问题标题】:checking restful features of the action in controller检查控制器中动作的宁静功能
【发布时间】:2012-11-12 11:03:55
【问题描述】:

在你指定的 ruby​​ on rails 中绘制宁静的路线时

  1. 如果控制器操作适用于成员或集合,并且
  2. 使用了什么http动词。 http://guides.rubyonrails.org/routing.html

如何从控制器实例中检查 1? (HTTP动词可以通过request.method查看)

丑陋的 hack 是检查命名路由是否以单数或复数形式存在,但路由可以有替代名称。

还有一个是检查用于识别成员的请求参数,但收集路由可以具有相同的(可选)参数。

【问题讨论】:

    标签: ruby-on-rails controller routes


    【解决方案1】:

    如果路线遵循宁静的约定,那么运行rake routes应该会给你你正在寻找的答案。

    您将看到预期的 http 动词(对 2 的回答),并且路径应该回答您的 1) 问题。对于成员操作,您需要 ID,因此通常路径包含 id

    此路由配置:

    resources :photos do
      member do
        get 'preview'
      end
    end
    

    会给你路径photos/:id/preview -> ment 预览单张照片

    以及路由配置:

    resources :photos do
      collection do
        get 'preview'
      end
    end
    

    会给你路径photos/preview -> 让你预览照片列表

    如果您需要从操作代码中获取此信息:

    • 检查 params[:id] 以区分意图。如果是针对成员的,则该值不会为零。

    【讨论】:

    • 是的,需要从操作代码中获取此信息,正如我在问题中已经指出的那样,您的解决方案不够安全。还是谢谢
    • 您能否更具体地说明您的意图和路线?怎么可能有一个可选的 :id 在用于集合的宁静路线中?
    • GET /products?id=2&evil_hackers_name=me
    【解决方案2】:

    你有没有看过 Journey gem 的这种方法?假设 3.2,如果在任何地方,那将拥有它,而不是请求参数。到时候就晚了不是吗?

    【讨论】:

    • 抱歉,看不到请求参数有什么帮助。旅程甚至没有自述文件,任何具体的提示在哪里看?谢谢
    • 这就是我的意思,在创建request 时,您已经通过了“成员或集合的识别”阶段。 Journey 是一个对象,可能包含它是否是成员,还不知道。不过老实说,如果它是 RESTful 的,那么您要么有参数,要么没有。如果它是超级敏感的,即使使用params = '' 我也非常喜欢成员和从 current_user 或类似的东西,如果可能的话,去掉参数。我相信你知道,但这对谷歌也有好处。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2010-12-26
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多