帖子中的NoMethodError#show geocoder

时间:2018-04-11 07:52:59

标签: ruby-on-rails ruby

所以我正在使用geocoder宝石。我在第8行的posts#show中遇到方法错误。基本上说经度未定义。

enter image description here

_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

我不确定错误是什么,但我确定有什么不对劲。我试过调查这个问题,但没有成功。我很感激你的帮助。

2 个答案:

答案 0 :(得分:1)

您的model必须有两个属性(数据库列),用于存储latitudelongitude坐标。

因此,您应该通过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