ruby-on-rails - 如何在 Rails 中将自定义错误返回到我的表单?

标签 ruby-on-rails forms validation

我在用户输入邮寄地址的网站上有一个简单的表格。

我有一个服务可以验证此地址并返回各种响应,成功、可疑或无效,以及返回该地址的完整和最完整的邮政编码。如果响应是“成功”,那么我会将其保存到数据库中。如果响应是“可疑”,那么我将更新 zip 字段并要求他们确认。如果响应为“无效”,那么我将返回一条错误消息,要求他们亲自与我们联系。

我正在尝试设置我的 rails create 操作,以便它调用我的服务(例如 http:/addresssValidator.com),我想通知用户他们是否有有效地址,并更新 zip带有建议的邮政编码。

然而,在 rails 中寻找地址验证,似乎只为我提供了在 rails 中使用内置错误和验证系统的 API,而不是如何将我自己的自定义结果返回到表单。

我怎样才能做到这一点?

下面是我的代码:

def create
  @valid = validate_address
    @address = Address.new(address_params)
  if @valid
    if @address.save
      redirect_to "/survey/success"
    else
      p @address.errors
      respond_to do |format|
        format.json {render json: @address.errors}
        format.html {render "/survey/failure"}

      end

    end
  else
    ##//Display errors
  end

  end 

def validate_address

@api_key = "my_api_key"
HTTParty.post("http://addressValidator.com",
              {
                  :body => [
                      "StreetAddress" =>  params[:address][:address_line_2] + " " + params[:address][:address_line_1],
                      "City" => params[:address][:city],
                      "PostalCode" => params[:address][:zip],
                      "State" => params[:address][:state],
                      "CountryCode" => params[:address][:country],
                      "Locale" => "en" ].to_json,
                  :APIKey => @api_key ,
                  :headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json'}
              })


return false;
##//return actual results from validator
  end

最佳答案

如果要向特定字段添加自定义错误:

@address.errors[:FIELD_NAME] << "Custom Error Message"

这样错误就会添加到您拥有的实例中,并且会在其他错误出现时显示在表单中。

如果只是想显示错误,可以将其添加到flash[:error]像这样:
flash[:error] = "Invalid address"

如果您希望错误移动到下一个方法(例如您将在它之后使用重定向),或者:
flash.now[:error] = "Invalid address" 

如果您希望错误仅在当前操作中可用。
正如@illusionist 在评论中所说。

并在html代码中,检查它是否存在,如果存在,则打印它:
<% if flash[:error] %>
  <%= flash[:error] %>
<% end %>

在这两种方式中,您都可以添加来自 @valid 的错误.

如果要存储新的 zip,请添加 @address.zip = @valid.zip .这样它就会在表单的字段中显示它。

关于ruby-on-rails - 如何在 Rails 中将自定义错误返回到我的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33238217/

相关文章:

ruby-on-rails - 事件存储 : get S3 key (not Rails blob key)

javascript - 在线表单更新谷歌表格后如何发送电子邮件?

php - 库中的 CodeIgniter 验证不接受回调

javascript - 我对调用函数 (check_number) 有疑问

ruby-on-rails - Carrierwave、MiniMagick 和 S3

ruby-on-rails - 如何让 faker gem 创建英文句子和段落

html - 2 个 HTML 表单并排

javascript - 使用 len 和 setter 续写密码验证失败

jquery - 如何正确设置 ajax Button_to 上的路由?

php - 使用上传的 CSV 中的值创建/填写表单