如何呈现/响应来自不相关模型/控制器的记录?

时间:2015-02-21 16:20:41

标签: ruby-on-rails active-model-serializers

我正在为我的大部分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并使用另一个项目回复?最好同时使用它们各自的序列化器?

1 个答案:

答案 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