【发布时间】:2014-09-27 03:45:51
【问题描述】:
我正在接管一个遗留 Rails 项目,但在为 API 版本控制正确设置命名空间时遇到了问题。
按照前任开发人员的指导,控制器和序列化程序被组织在版本化目录中,如下所示:
/controllers
/api
/v1
...api v1 controllers here
/v2
...api v2 controllers here
/serializers
/v1
...api v1 serializers here
/v2
...api v2 serializers here
然后在 .rb 文件中,看起来各种组件是通过与该文件夹结构匹配的命名空间来访问的。例如:
class Api::V1::PostsController < ApplicationController
def index
@moves = Posts.all()
render json: @moves, each_serializer ::V1::PostSerializer
一切都很好。问题是,如果我想从 V1 内部访问 V2 命名空间中的某些内容,则会出现错误。例如,如果我想做这样的事情:
class Api::V1::PostsController < ApplicationController
def comments
@comments = Comments.where(:post_id => params[:id])
render json: @comments, each_serializer ::V2::CommentSerializer
我收到此错误:
SyntaxError (
/path/to/ptoject/app/controllers/api/v1/posts_controller.rb:22: syntax error,
unexpected tLABEL
render json: @comments, each_serializer: ::V2:CommentSerializer
^):
那么我需要做什么才能从 V1 调用 V2 命名空间?
【问题讨论】:
标签: ruby-on-rails ruby api serialization