所以我正在使用geocoder
宝石。我在第8行的posts#show
中遇到方法错误。基本上说经度未定义。
_form,html.erb
<%= form_with(model: post, local: true) do |form| %>
<% if post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(post.errors.count, "error") %> prohibited this
post from being saved:</h2>
<ul>
<% post.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :date %>
<%= form.datetime_select :date, id: :post_date %>
</div>
<div class="field">
<%= form.label :name %>
<%= form.text_area :name, id: :post_name %>
</div>
<div class="action">
<%= form.label :address %>
<%= form.text_area :address, id: "post_address" %>
</div>
<div class="field">
<%= form.label :user_id %>
<%= form.number_field :user_id, id: :post_user_id, value: current_user.id %>
</div>
<div class="field">
<%= form.label :description %>
<%= form.text_area :description, id: :post_description %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
post.rb
class Post < ApplicationRecord
belongs_to :user
geocoded_by :address
after_validation :geocode, if: :address_changed?
end
show.html.erb
<p> where: <%=@post.longitude %>, <%=@post.latitude%></p>
posts_controller_rb
def post_params
params.require(:post).permit(:date, :user_id, :description, :name, :address)
end
load_and_authorize_resource
我不确定错误是什么,但我确定有什么不对劲。我试过调查这个问题,但没有成功。我很感激你的帮助。
答案 0 :(得分:1)
您的model
必须有两个属性(数据库列),用于存储latitude
和longitude
坐标。
因此,您应该通过migration
添加这些列:
rails generate migration AddLatitudeAndLongitudeToPost latitude:float longitude:float
然后迁移数据库:
rake db:migrate
答案 1 :(得分:0)
我认为你还没有迁移这两列,所以运行一个命令来迁移这两列,看起来像这样
rails g migration AddLatitudeAndLongitudeToPost latitude:float longitude:float
然后运行
rake db:migrate #=> or rails
请参阅此Object Geocoding