我试图将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
。