我正在为我的大部分JSON API使用ActiveModelSerializers。
我有一个User模型,users_controller和user_serializer。在我的users_controller中,我通过以下内容渲染我的json ...
user = User.find_by_id(param[:id])
respond_with user, serializer: Api::V1::UserSerializer
现在,我还有一个Comment模型,comments_controller和comment_serializer。我从comments_controller做同样的事情来渲染它的json。
comment = Comment.find_by_id(param[:id])
respond_with comment, serializer: Api::V1::CommentSerializer
两者都很棒。
但是,假设我想在评论控制器中将我的用户与我的评论一起呈现。我甚至无法让用户显示出来。如果我暂时删除评论代码并做这样的事情只是出于测试目的......
#comment = Comment.find_by_id(param[:id])
#respond_with comment, serializer: Api::V1::CommentSerializer
user = User.find(1)
respond_with user, serializer: Api::V1::UserSerializer //error on this line
我会收到以下错误
NoMethodError (undefined method `user_url' for #<Api::V1::CommentsController:0x007b828f407218>):
为什么会这样。我如何使用AMS并使用另一个项目回复?最好同时使用它们各自的序列化器?
答案 0 :(得分:0)
尝试通过调用用户来设置实例变量:
@user = User.find(1)
comment = Comment.find_by_id(param[:id])
respond_with comment, serializer: Api::V1::CommentSerializer
因为它是一个实例变量,所以现在可以在视图中调用它而不传递它。
<%= form_for @user do |f| %>
<%= f.text_field :name %>
<%= f.submit "Create" %>
<% end %>
您可以根据需要在控制器中创建任意数量的实例变量。
您也可以尝试:
respond_with(@user, @comment) serializer: Api::V1::CommentSerializer