'nilClass' rails 上的地理编码器 4
'nilClass' with geocoder on rails 4
我正在尝试在我的 rails 4 应用程序中实施 geocoder
,但我遇到了初始化问题。该应用程序正确地创建、删除、编辑等,但是当我尝试在 show
模板中实现 nearbys
方法时,我得到一个带有 undefined method `each' for nil:NilClass
的 NoMethodError in Events#show
。当我在 rails 3 和 attr_accessible
上 运行 它时,该应用程序完美地执行了所有操作,但是当我切换到 rails 4 并更改为强参数时,我得到了这个错误。我知道这是非常简单的事情,我只是看不出我错过了什么。
这是我的 event
模型:
class Event < ActiveRecord::Base
belongs_to :user
validates_presence_of :user
geocoded_by :address
after_validation :geocode, :if => :address_changed?
end
这是我的 events_controller
:
class EventsController < ApplicationController
before_action :authenticate_user!
load_and_authorize_resource
def index
if params[:search].present?
@events = Event.near(params[:search], 50, :order => :distance)
else
@events = Event.all
end
end
def show
end
def new
end
def edit
end
def create
@event = Event.new(event_params)
@event.user_id = current_user.id
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render :show, status: :created, address: @event }
else
format.html { render :new }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @event.update(event_params)
format.html { redirect_to @event, notice: 'Event was successfully updated.' }
format.json { render :show, status: :ok, address: @event }
else
format.html { render :edit }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
def destroy
@event.destroy
respond_to do |format|
format.html { redirect_to events_url, notice: 'Event was successfully destroyed.' }
format.json { head :no_content }
end
end
private
def event_params
params.require(:event).permit(:name, :event_date, :start_time, :end_time, :address, :latitude, :longitude, :description, :user_id)
end
end
这是我的 show
模板:
<div id="header"></div>
<p>
<b>Name:</b>
<%= @event.name %>
</p>
<p>
<b>Event date:</b>
<%= @event.try(:event_date).strftime("%a, %B %d") %>
</p>
<p>
<b>Start time:</b>
<%= @event.try(:start_time).strftime("%l:%M%p") %>
</p>
<p>
<b>End time:</b>
<%= @event.try(:end_time).strftime("%l:%M%p") %>
</p>
<p>
<b>Address:</b>
<%= @event.address %>
</p>
<p>
<b>Latitude:</b>
<%= @event.latitude %>
</p>
<p>
<b>Longitude:</b>
<%= @event.longitude %>
</p>
<p>
<b>Description:</b>
<%= @event.description %>
</p>
<p>
<b>Organizer:</b>
<%= @event.user.name %>
</p>
<%= image_tag "http://maps.google.com/maps/api/staticmap?size=450x300&sensor=false&zoom=16&markers=#{@event.latitude}%2C#{@event.longitude}" %>
<h3>Nearby events</h3>
<ul>
<% for event in @event.nearbys(10) %>
<li><%= link_to event.address, event %> (<%= event.distance.round(2) %> miles)</li>
<% end %>
</ul>
<%= link_to 'Edit', edit_event_path(@event) %> |
<%= link_to 'Back', events_path %>
我在 show
模板 (for event in @event.nearbys(10)
) 的第 52 行收到错误。
我非常感谢任何帮助!
问题出在我的 seeds.rb
文件上。 create
操作正确地对 :latitude
和 :longitude
字段进行了地理编码,但我在第一次为数据库做种时没有为这些字段输入值。
我正在尝试在我的 rails 4 应用程序中实施 geocoder
,但我遇到了初始化问题。该应用程序正确地创建、删除、编辑等,但是当我尝试在 show
模板中实现 nearbys
方法时,我得到一个带有 undefined method `each' for nil:NilClass
的 NoMethodError in Events#show
。当我在 rails 3 和 attr_accessible
上 运行 它时,该应用程序完美地执行了所有操作,但是当我切换到 rails 4 并更改为强参数时,我得到了这个错误。我知道这是非常简单的事情,我只是看不出我错过了什么。
这是我的 event
模型:
class Event < ActiveRecord::Base
belongs_to :user
validates_presence_of :user
geocoded_by :address
after_validation :geocode, :if => :address_changed?
end
这是我的 events_controller
:
class EventsController < ApplicationController
before_action :authenticate_user!
load_and_authorize_resource
def index
if params[:search].present?
@events = Event.near(params[:search], 50, :order => :distance)
else
@events = Event.all
end
end
def show
end
def new
end
def edit
end
def create
@event = Event.new(event_params)
@event.user_id = current_user.id
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render :show, status: :created, address: @event }
else
format.html { render :new }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @event.update(event_params)
format.html { redirect_to @event, notice: 'Event was successfully updated.' }
format.json { render :show, status: :ok, address: @event }
else
format.html { render :edit }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
def destroy
@event.destroy
respond_to do |format|
format.html { redirect_to events_url, notice: 'Event was successfully destroyed.' }
format.json { head :no_content }
end
end
private
def event_params
params.require(:event).permit(:name, :event_date, :start_time, :end_time, :address, :latitude, :longitude, :description, :user_id)
end
end
这是我的 show
模板:
<div id="header"></div>
<p>
<b>Name:</b>
<%= @event.name %>
</p>
<p>
<b>Event date:</b>
<%= @event.try(:event_date).strftime("%a, %B %d") %>
</p>
<p>
<b>Start time:</b>
<%= @event.try(:start_time).strftime("%l:%M%p") %>
</p>
<p>
<b>End time:</b>
<%= @event.try(:end_time).strftime("%l:%M%p") %>
</p>
<p>
<b>Address:</b>
<%= @event.address %>
</p>
<p>
<b>Latitude:</b>
<%= @event.latitude %>
</p>
<p>
<b>Longitude:</b>
<%= @event.longitude %>
</p>
<p>
<b>Description:</b>
<%= @event.description %>
</p>
<p>
<b>Organizer:</b>
<%= @event.user.name %>
</p>
<%= image_tag "http://maps.google.com/maps/api/staticmap?size=450x300&sensor=false&zoom=16&markers=#{@event.latitude}%2C#{@event.longitude}" %>
<h3>Nearby events</h3>
<ul>
<% for event in @event.nearbys(10) %>
<li><%= link_to event.address, event %> (<%= event.distance.round(2) %> miles)</li>
<% end %>
</ul>
<%= link_to 'Edit', edit_event_path(@event) %> |
<%= link_to 'Back', events_path %>
我在 show
模板 (for event in @event.nearbys(10)
) 的第 52 行收到错误。
我非常感谢任何帮助!
问题出在我的 seeds.rb
文件上。 create
操作正确地对 :latitude
和 :longitude
字段进行了地理编码,但我在第一次为数据库做种时没有为这些字段输入值。