我在用户输入邮寄地址的网站上有一个简单的表格。
我有一个服务可以验证此地址并返回各种响应,成功、可疑或无效,以及返回该地址的完整和最完整的邮政编码。如果响应是“成功”,那么我会将其保存到数据库中。如果响应是“可疑”,那么我将更新 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/