没有路由匹配ajax json请求的[POST]

时间:2014-08-17 14:37:59

标签: ruby-on-rails ajax json routing

群组的当前路线是:

resources :groups do
  resources :links # Enables group/:id/link/new
  collection do
    post 'order_links'
  end 
  # I tried adding: 
  # collection do
  #   post 'show'
  # end
end 

如何添加' POST" show的路由,以便可以使用json show请求?

我只试过get 'show',即

  resources :groups do
    resources :links # Enables group/:id/link/new
    collection do
      post 'order_links'
    end
    get 'show'
  end

但我得到

Error loading: <!DOCTYPE html>
...
<h1>Routing Error</h1>
<p><pre>No route matches [POST] &quot;/groups/42&quot;</pre></p>
<p>

3 个答案:

答案 0 :(得分:1)

<强>机智

迈克尔,也许您更适合使用Rails resourceful routing structure中定义的标准CRUD操作:

enter image description here

如上所示,按惯例,您有GET显示操作,这意味着您可以将此路由与相应的respond_to块一起使用,以定义JSON的响应:

#app/controllers/groups_controller.rb
Class GroupsController < ApplicationController
   def show
      @group = Group.find params[:id]
      respond_to do |format|
        format.html
        format.json { render json: @group.to_json }
      end
   end
end
  • 我不知道你想用这个做什么 - 所以我刚刚将@group变量发布到你的JSON请求

-

Mime类型

我认为您对mime types与Rails

的角色感到困惑

您的controller#actions不仅限于mime types。 mime类型只是确定正在发送的请求的类型的一种方式,而不是将要处理它的操作

因此,您可能更适合将请求发送到系统中已有的控制器(凭借resources指令),然后根据mime类型确定响应(在您的情况下) JSON)。

您可以通过以下方式处理请求来执行此操作:

#app/assets/javascripts/application.js
$.ajax({
   url: "groups/" + $(this).attr("href"),
   success: function(data) {
      alert(data);
   }
});

答案 1 :(得分:0)

你可以这样做

resources :groups do
    resources :links # Enables group/:id/link/new
    collection do
      post 'order_links'
      post 'show'
    end
 end

答案 2 :(得分:0)

  

我想进行ajax调用,示例似乎想要一个post路由(请参阅错误)。如果我只是请求数据,是否可以使用get?

如果您只是从数据库中获取数据,则可以get使用,实际上这是get请求通常设计的目的。