【问题标题】:RESTful Rails 3 routingRESTful Rails 3 路由
【发布时间】:2012-11-01 22:43:33
【问题描述】:

我是 RESTful 设计的新手并且很困惑:如果我对同一个资源(例如 /weblogs/myweblog)进行 PUT、GET 或 POST,我应该如何在 route.rb 和相关控制器中编写? 以下是否有效? 在 route.rb 中

match 'weblogs/myweblog/new' => 'weblogs#create_new_blog'
match 'weblogs/myweblog/edit/:id' => 'weblogs#edit_blog' 
.
.

在 weblogs_controller.rb 中

def create_new_blog
   ...
end

def edit_blog
  params[:id]..
  ....
end

如果我想对同一个资源执行 GET/PUT/POST 感到困惑,如果它们的 URL 相同但只有 HTTP 请求不同,如何在控制器中编写不同的操作?

【问题讨论】:

    标签: ruby-on-rails ruby rest routing


    【解决方案1】:

    一般来说,最好根据资源来定义路由,因此,如果您有一个名为 webblog 的资源,则可以使用以下方式定义您的路由:

    resources :weblogs
    

    如果您检查由此生成的路由(使用rake routes),您将看到它定义了一组标准映射,从GETPUTPOSTDELETE 到控制器的url 操作行动:

       webblogs GET    /weblogs(.:format)         weblogs#index
                POST   /weblogs(.:format)         weblogs#create
    new_webblog GET    /weblogs/new(.:format)     weblogs#new
        webblog GET    /weblogs/:id(.:format)     weblogs#show
                PUT    /weblogs/:id(.:format)     weblogs#update
                DELETE /weblogs/:id(.:format)     weblogs#destroy
    

    这些路由将映射到标准控制器操作indexcreatenewshow 等。

    如果出于某种原因您想使用resources定义路由,您可以单独定义它们:

    get '/weblogs' => 'weblogs#index'
    get '/weblogs/new' => 'weblogs#new'
    get '/weblogs/:id/edit' => 'weblogs#edit'
    put '/weblogs/:id' => 'weblogs#update'
    ...
    

    通过使用getput 等定义路由,您可以将单个 URL 映射到多个控制器操作,例如像这样:

    get '/weblogs/myweblog' => 'weblogs#show_myweblog'
    put '/weblogs/myweblog' => 'weblogs#update_myweblog'
    post '/weblogs/myweblog' => 'weblogs#create_myweblog'
    destroy '/weblogs/myweblog' => 'weblogs#destroymy_weblog'
    

    这会将 URL /weblogs/myweblog 映射到方法 show_myweblog 用于 GET 请求,update_myweblog 用于 PUT 请求,create_myweblog 用于 POST 请求,destroy_myweblog 用于 DELETE 请求。

    或者,使用标准resources,您可以使用only 选项从全套路线中挑选您想要的路线:

    resources :weblogs, only: [:show, :edit]
    

    有关详细信息,请参阅documentation。我希望这能回答你的问题,如果没有,请提供更多关于你想在 cmets 中做什么的细节。

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 1970-01-01
      • 2011-04-09
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多