rails将自定义路由添加到现有资源

时间:2016-06-14 15:44:48

标签: ruby-on-rails ajax

在我的routes.rb文件中我有一个资源:

resources :authentication

但我也想创建一个自定义路由,所以我在上一行中有以下内容:

scope :authentication do
  get 'is_signed_in', to: 'authentication#is_signed_in?'
end

我跑了bin/rake routes

我的控制器有这个:

class AuthenticationController < ApplicationController
  def is_signed_in?
    if user_signed_in?
      render :json => {"signed_in" => true, "user" => current_user}.to_json()
    else
      render :json => {"signed_in" => false}.to_json()
    end
  end
end

然而,当我尝试访问此路线时,我一直得到404.这就是我试图访问的方式:

$.ajax({
  method: "GET",
  url: "/authentication/is_signed_in.json"
})
我错过了什么吗?我必须做一些特别的事情来允许一个.json扩展名的路线吗?

1 个答案:

答案 0 :(得分:1)

您无需在此处使用scope。只需添加以下 resources :authentication

get 'authentication/is_signed_in', to: 'authentication#is_signed_in?'

或者,或许更规范(see the docs),您可以向给定资源添加更多操作,如下所示:

resources :authentication do
  get 'is_signed_in', on: :collection
end

但是,在这种情况下,您可能需要将is_signed_in?中的AuthenticationController方法的名称更改为is_signed_in(最后不包含?)。< / p>