首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveResource错误处理

ActiveResource错误处理
EN

Stack Overflow用户
提问于 2010-06-22 23:16:49
回答 3查看 3.1K关注 0票数 11

我已经寻找了一段时间,但到目前为止还没有找到满意的答案。我有两个应用程序。FrontApp和BackApp。FrontApp有一个活动资源,它模仿了BackApp中的模型。所有模型级别的验证都在BackApp中,我需要在FrontApp中处理这些BackApp验证。

我有下面的active-resource代码:

代码语言:javascript
复制
class RemoteUser < ActiveResource::Base
  self.site = SITE
  self.format = :json
  self.element_name = "user"
end

这模拟了一个模型,如下所示

代码语言:javascript
复制
class User < ActiveRecord::Base

  attr_accessor :username, :password

  validates_presence_of :username
  validates_presence_of :password
end

每当我在前端应用程序中创建一个新的RemoteUser时,我都会在它上面调用.save。例如:

代码语言:javascript
复制
user = RemoteSession.new(:username => "user", :password => "")
user.save

但是,由于密码为空,我需要将错误从BackApp传递回FrontApp。这没发生过。我只是不明白如何成功地做到这一点。这一定是一个常见的集成场景;但是似乎没有一个很好的文档来描述它?

作为代理的restful控制器如下所示:

代码语言:javascript
复制
class UsersController < ActionController::Base
  def create
    respond_to do |format|
      format.json do
        user = User.new(:username => params[:username], :password => params[:password])
        if user.save
          render :json => user
        else
          render :json => user.errors, :status => :unprocessable_entity
        end
      end
    end
  end
end

我错过了什么?任何帮助都将不胜感激。

干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-12 02:30:56

从rails源代码中,我发现ActiveResource没有得到错误的原因是因为我没有将错误赋给json中的" errors“标签。这是没有文档记录的,但却是必需的。:)

所以我的代码应该是:

代码语言:javascript
复制
render :json => {:errors => user.errors}, :status => :unprocessable_entity
票数 13
EN

Stack Overflow用户

发布于 2010-06-22 23:41:46

在代码中:

代码语言:javascript
复制
class UsersController < ActionController::Base
  def create
    respond_to do |format|
      format.json do
        user = User.new(:username => params[:username], :password => params[:password])
        if user.save
          render :json => user
        else
          render :json => user.errors, :status => :unprocessable_entity
        end
      end
    end
  end
end

尝试替换

代码语言:javascript
复制
user = User.new(:username => params[:username], :password => params[:password])

使用

代码语言:javascript
复制
user = User.new(params[:user])

您的活动资源模型像上面的散列一样传递参数:

代码语言:javascript
复制
:user => { :username => "xpto", :password => "yst" }
票数 1
EN

Stack Overflow用户

发布于 2014-02-05 18:32:11

这个解决方案对我很有效:https://stackoverflow.com/a/10051362/311744

更新操作:

代码语言:javascript
复制
def update
    @user = User.find(params[:id])

    respond_to do |format|
      if @user.update_attributes(params[:user])
        format.html { redirect_to @user, notice: 'User was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json {

          render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

调用控制器:

代码语言:javascript
复制
@remote_user = RemoteUser.find(params[:id])
if (@remote_user.update_attributes(params[:remote_user]))
  redirect_to([:admin, @remote_user], notice: 'Remote user was successfully updated.')
else
  flash[:error] = @remote_user.errors.full_messages
  render action: 'edit'
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3094523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档