Sca*_*olo 5 ruby ruby-on-rails rails-geocoder
以下是我使用Geocoder的课程。我无法检查通过地址解析器输入的地址是否有效。当我添加一个公司/编辑一个公司的地址时,此代码非常有用。但是我需要代码才能正常工作,因此,当用户尝试在公司的编辑或创建中放置不提供纬度和经度的地址时,会弹出错误并通知用户该地址无效。
模型
class Company < ActiveRecord::Base
validates :name, presence: true, length: { maximum: 30 }
validates :website, presence: true
validates :address, presence: true
validates :description, presence: true
validates :primary_field, presence: true
geocoded_by :address
before_save :geocode, if: ->(obj){ obj.address.present? and obj.address_changed? }
after_save :set_popup_value
private
...
end
Run Code Online (Sandbox Code Playgroud)
视图
<% provide(:title, 'Add Company') %>
<h1>Add Company</h1>
<div class="row">
<div class="span6 offset3">
<%= form_for(@company) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :website %>
<%= f.text_field :website %>
<%= f.label :primary_field %>
<%= f.select :primary_field, @primary_field %>
<%= f.label :address %>
<%= f.text_field :address, :placeholder => '123 Test St, City State Zip'%>
<%= f.label :description %>
<%= f.text_area :description, :size => "30x5" %>
<%= f.submit "Add Company", class: "btn btn-large btn-primary" %>
<% end %>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
因此,经过几天的摸索,我想出了几个解决方案。第一个确实很糟糕,但完成了我所需要的。据我目前所知,我的第二个解决方案更加优雅并且效果很好!我希望其他人觉得这很有用。
我只需几行即可处理控制器中的所有逻辑。
geocoded_by :address
after_validation :geocode, if: ->(obj){ obj.address.present? and obj.address_changed? }
after_validation :lat_changed?
after_save :set_popup_value
private
# This is used to make sure that our address is actually parsed properly and we
# get a valuable lat/long
def lat_changed?
if (self.address_changed?)
if !(self.latitude_changed?)
self.errors.add(:address, "is not valid")
return false
end
end
return true
end
Run Code Online (Sandbox Code Playgroud)
通过在地理编码之后创建另一个after_validation,我可以检查适当的值是否发生变化,以及它们是否以某种方式发生变化,然后我就知道地理编码中存在问题。
如果地址发生了变化,但纬度没有变化,那么您就知道,当地址通过地理编码器时,它没有得到返回的纬度/经度。如果是这种情况,那么我们只需添加一个错误来抛出给用户并返回 false,这将停止保存到数据库。
我希望其他有此问题的人能够找到这篇文章!
| 归档时间: |
|
| 查看次数: |
2714 次 |
| 最近记录: |