关于Rails路由命名空间

时间:2014-10-21 08:52:41

标签: ruby-on-rails ruby routes

在我的Rails应用中,我有一个控制器/app/api/mem_controller.rb

class MemController < AplicationApiController
  before_filter :mem_login?
  def follows
    _mem = MemAccount.find(params[:id])
    render json: {
      :items=> _mem.follow_mems.limit(page_size).offset(page * page_size),
      :count=> _mem.follow_mems.length
    }.as_json(:methods=>['avatar_url'])
  end
end

我在application.rb

中添加了一个配置
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]

我的路线是:

namespace :api do 
  get "mem/:id/follows" => 'mem#follows'
end

现在我希望路线为/api/mem/1/follows

但这引起了错误:

uninitialized constant Api

如果我取出namespace包装器,/mem/1/follows将会正常工作。

然后我想知道如何通过路由关键字/api/mem/1/follows实现namespace,我需要api前缀来避免冲突。

我不想将api文件夹放在/app/controller/

1 个答案:

答案 0 :(得分:2)

是的确定,因为您正在使用命名空间。 试试这个:

class Api::MemController < AplicationApiController
    ...
end

并且控制器MemController应该是:

app/controllers/api/mem_controller.rb

如果您不想创建子文件夹,那么您应该在scope中使用namespace代替routes.rb,在这种情况下,您可以保留MemController 1}}不改变(我的意思是你不需要添加Api::

scope '/api' do

end

更多解释:http://guides.rubyonrails.org/routing.html