需要帮助返回预期的JSON输出



我试图将authorid添加到post map中。我不确定这是否可能做到,因为我几乎没有Ruby的经验。我尝试过在post map上使用多种方法,例如合并,存储等,但是似乎没有任何效果。我将感激任何我能得到的帮助,提前谢谢你!

def update
post = current_user.posts.find_by(id: params[:id])
# postMap = {post: post}
# post.merge!("authorIds": params[:authorIds])
# newPost = post.merge!('authorIds', params[:authorIds]
if post.update(post_params)
render json: {post: post}, status: :ok
else
render json: {error: post.errors}, status: :unprocessable_entity
end
end

路线功能图像到测试用例

对于update方法的大部分,您处理的是Post的实例,而不是散列对象。当你只想在响应中返回一个值时,你需要将它添加到将在尽可能接近结束时返回的对象中。

因为从Post的实例到返回的JSON结构的转换是自动完成的,所以你需要打破这些自动步骤,并在那里添加新的值。

def update
post = current_user.posts.find_by(id: params[:id])
if post.update(post_params)                       # `post` is an instance of `Post`
post_hash = post.as_json                        # translate into a Ruby hash
post_hash.merge!(authorIds: params[:authorIds]) # merge the additional value
render json: { post: post_hash }, status: :ok   # return the modified hash
else
render json: { error: post.errors }, status: :unprocessable_entity
end
end

注意:当你有像json: { post: post }这样的行,那么Ruby on Rails将首先在post上调用as_json,这将把Post的实例转换为Post的Ruby哈希表示,然后Rails将该哈希转储为JSON字符串。通过打破这些步骤,我们可以向哈希中注入额外的值。

Btw:参数和返回散列中的authorIds键不遵循Ruby约定,可能会使将来从事同一项目的其他开发人员感到困惑。我建议命名为author_ids

相关内容

  • 没有找到相关文章

最新更新