Bob*_*Bob 3 forms validation ruby-on-rails
我在一个用户输入邮寄地址的网站上有一个简单的表格.
我有一个服务可以验证这个地址并返回各种响应,包括Success,Suspect或Invalid,以及返回该地址的完整和最完整的邮政编码.如果响应是"成功",那么我将它保存到数据库.如果响应是"可疑",那么我将更新zip字段并要求他们确认.如果回复是"无效",那么我将返回一条错误消息,要求他们亲自与我们联系.
我正在尝试设置我的rails创建操作,以便它调用我的服务(例如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
Run Code Online (Sandbox Code Playgroud)
如果要向特定字段添加自定义错误:
@address.errors[:FIELD_NAME] << "Custom Error Message"
Run Code Online (Sandbox Code Playgroud)
这样,错误就会添加到您拥有的实例中,并在其他错误出现时显示在表单中.
如果您只想显示错误,可以将其添加到flash[:error]以下内容中:
flash[:error] = "Invalid address"
Run Code Online (Sandbox Code Playgroud)
如果你想让错误转移到下一个方法(就像你将在它之后使用重定向),或者:
flash.now[:error] = "Invalid address"
Run Code Online (Sandbox Code Playgroud)
如果您希望错误仅在当前操作中可用.正如@illusionist在评论中所说.
并在HTML代码中,检查它是否存在,如果是,打印它:
<% if flash[:error] %>
<%= flash[:error] %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
在两种方式中,您都可以添加错误@valid.
如果要存储新zip,请添加@address.zip = @valid.zip.这样它就会在表格中显示出来.
| 归档时间: |
|
| 查看次数: |
1666 次 |
| 最近记录: |