Ruby 咨询一个 API 批量操作的问题

wuwx · 2014年02月15日 · 最后由 hmilym 回复于 2014年02月16日 · 2399 次阅读

更新的是一个 users 表,api 地址是 /api/users 当然这都不是重点 假设 users 表里有 2 个字段,一个是 login,一个是 name,设置 validates :login, uniqueness: true 也就是说,通过 api 批量 POST 到 /api/users 的话,如果 login 是重复的,就会出现错误 就会给一个错误提示:format.json { render json: @user.errors, status: :unprocessable_user }

但是感觉这里有个不那么性感的地方,想增加一个用户,但是又被系统提示为重复,然后又不知道到底谁跟他重复了 因为如果系统已经有这个用户的了,还期望看看这个用户的资料是否需要更新(不是绝对需要更新)

或者 GET /api/users 增加 login 参数来返回搜索到的这个用户?然后再根据 ID 来更新么?

或者大家有什么别的性感又曼妙的方案么?

login 是什么东东

我知道是字段,但很少见取这个名字的。是不是 token 之类的东西。

#3 楼 @billy 就当做是 email 好了

@wuwx, 如果你这个 API 是面向一般用户的,我建议就不要动了。这个返回的错误是合适的。用户不应该知道 login 的具体错误,只要知道不对就好了。

如果是给管理员用的。API 的地址可以不要用这么通用的。然后你可以根据是否有错误来返回结果

@user = User.new params[:user]
@user.save.tap do |user|
  if user.errors[:login]
    orig_user = User.find user.login
    user.errors.merge! orgi_user: orig_user.attributes
  end
end
respond_with @user

以上把原来用户加入 errors 并在结果中返回给管理员做参考。

此类 api 我有做过,当时也一样有这样的困扰,我的解决方案就是提供一个 search 方法,根据 login 来查找重复。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号