Rails控制器中的一个操作不会返回任何数据

时间:2014-12-30 22:55:11

标签: ruby-on-rails

所以我在RelationshipController

中有这两个动作
class RelationshipsController < ApplicationController
    before_filter :authenticate_user!
    respond_to :json

    def create
        user = User.find(params[:user_to_follow_id])
        relationship = current_user.follow!(user)
        respond_with user
    end

    def destroy
        user = User.find(params[:id])
        current_user.unfollow!(user)
        logger.debug user.id
        respond_with user
    end
end

现在,当我使用创建操作时,我会使用respond_with user方法获得回复,该方法也使用ActiveModel::Serializer进行了很好的格式化。

当我使用destroy方法时,我得到一个完全空白的响应。它似乎与render json: {user: user, status: 201}一起使用,但我想知道为什么我不能将respond_with用于它们?他们发回的用户在两种情况下都具有相同类型的数据。

取消关注方法:

def unfollow!(user)
        $redis.multi do
            $redis.srem(self.redis_key(:following), user.id)
            $redis.srem(user.redis_key(:followers), self.id)
        end
end

1 个答案:

答案 0 :(得分:1)

看起来你正在碰到action_controller / responder.rb的默认响应

# File actionpack/lib/action_controller/metal/responder.rb, line 203
def api_behavior(error)
  raise error unless resourceful?
  raise MissingRenderer.new(format) unless has_renderer?

  if get?
    display resource
  elsif post?
    display resource, :status => :created, :location => api_location
  else
    head :no_content
  end
end

如果您正在回复收据或帖子,那么预计会有一些内容回来,否则只是一个头,没有内容。默认情况下,您刚删除了一个关系,因此无法返回任何内容。如果你想回复一个用户以回复删除关系,那么我认为你必须制定自己的回复(你的渲染子语句)。