Forum: Ruby on Rails gmaps4rails: undefined method `model_name' for NilClass:Class

80ac7d4e6f326320dc896211cf436ed1?d=identicon&s=25 Jax (Guest)
on 2013-04-02 16:36
(Received via mailing list)
Hi All,

just in a spot of bother with this gem, I am trying to create a new
location and get the above msg.

here is my controller:

class LocationsController < ApplicationController
  # GET /locations
  # GET /locations.json

  def index
    @locations = Location.all
    @json = Location.all.to_gmaps4rails
    end
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @locations }
    end
  end

  # GET /locations/1
  # GET /locations/1.json
  def show
    @location = Location.find(params[:id])
    @json = Location.all.to_gmaps4rails
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @location }
    end
  end

  # GET /locations/new
  # GET /locations/new.json
  def new
    @location = Location.new
    @json = Location.all.to_gmaps4rails

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @location }
    end
  end

  # GET /locations/1/edit
  def edit
    @location = Location.find(params[:id])
    @json = Location.all.to_gmaps4rails
  end

  # POST /locations
  # POST /locations.json
  def create
    @location = Location.new(params[:location])
    @json = Location.all.to_gmaps4rails
    respond_to do |format|
      if @location.save
        format.html { redirect_to @location, notice: 'Location was
successfully created.' }
        format.json { render json: @location, status: :created,
location:
@location }
      else
        format.html { render action: "new" }
        format.json { render json: @location.errors, status:
:unprocessable_entity }
      end
    end
  end

  # PUT /locations/1
  # PUT /locations/1.json
  def update
    @location = Location.find(params[:id])
    @json = Location.all.to_gmaps4rails
    respond_to do |format|
      if @location.update_attributes(params[:location])
        format.html { redirect_to @location, notice: 'Location was
successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @location.errors, status:
:unprocessable_entity }
      end
    end
  end

  # DELETE /locations/1
  # DELETE /locations/1.json
  def destroy
    @location = Location.find(params[:id])
    @location.destroy
    @json = Location.all.to_gmaps4rails
    respond_to do |format|
      format.html { redirect_to locations_url }
      format.json { head :no_content }
    end
  end

and the _form I use to create the new location:

<%= form_for(@location) do |f| %>
  <% if @location.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@location.errors.count, "error") %> prohibited
this
location from being saved:</h2>

      <ul>
      <% @location.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :id %><br />
    <%= f.number_field :id %>
  </div>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :coordinates %><br />
    <%= f.text_field :coordinates %>
  </div>
  <div class="field">
    <%= f.label :course_id %><br />
    <%= f.number_field :course_id %>
  </div>
  <div class="field">
    <%= f.label :college_id %><br />
    <%= f.number_field :college_id %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

This is the error msg in full:

NoMethodError in Locations#new

Showing *C:/Postgrads0204/app/views/locations/_form.html.erb* where line
*#1
* raised:

undefined method `model_name' for NilClass:Class

Extracted source (around line *#1*):

1: <%= form_for(@location) do |f| %>

2:   <% if @location.errors.any? %>

3:     <div id="error_explanation">

4:       <h2><%= pluralize(@location.errors.count, "error") %>
prohibited this location from being saved:</h2>

Trace of template inclusion: app/views/locations/new.html.erb

Rails.root: C:/Postgrads0204
Application Trace <http://localhost:3000/locations/new#> | Framework
Trace<http://localhost:3000/locations/new#>
 | Full Trace <http://localhost:3000/locations/new#>

app/views/locations/_form.html.erb:1:in
`_app_views_locations__form_html_erb___82209480_46213008'

app/views/locations/new.html.erb:3:in
`_app_views_locations_new_html_erb___810294894_46206828'


Any Ideas where am I going wrong?

Cheers

J
5f94b9b346c2aa648a80bc259978e5bc?d=identicon&s=25 Colin Law (Guest)
on 2013-04-02 16:49
(Received via mailing list)
On 2 April 2013 15:34, Jax <javier_rossetti1972@hotmail.com> wrote:
> 1: <%= form_for(@location) do |f| %>
The problem is nothing to do with the gem.  @location is nil.  Are you
passing the value across when you render the form?  It seems to be the
only bit of code that you have not shown us.  See
http://guides.rubyonrails.org/layouts_and_renderin...
for how to pass data to the form.

Also have a look at the Rails Guide on debugging with will show you
techniques that you can use to debug your code.

Colin
80ac7d4e6f326320dc896211cf436ed1?d=identicon&s=25 Jax (Guest)
on 2013-04-02 18:08
(Received via mailing list)
Hi Colin,

Thank you for your comment, I was actually missing a "end" tag to close
off
the class in the controller!

Cheers anyway

J
5f94b9b346c2aa648a80bc259978e5bc?d=identicon&s=25 Colin Law (Guest)
on 2013-04-02 18:39
(Received via mailing list)
On 2 April 2013 17:06, Jax <javier_rossetti1972@hotmail.com> wrote:
> Hi Colin,
>
> Thank you for your comment, I was actually missing a "end" tag to close off
> the class in the controller!

A missing end tag in the controller code gave you the error "undefined
method `model_name' for NilClass:Class"?  That is unusual.  I would
have expected to get a syntax error about the missing end when the
class was loaded.

Colin
61459a142ef3df3f07bfed8b20d1f193?d=identicon&s=25 Rajesh G. (rajesh_g)
on 2013-10-31 06:33
Attachment: gmap.png (10 KB)
i am using google maps for my project in rails 4, ruby 2, and
gmaps4rails '1.5.6' but the problem is i am not getting marker at center
of the map as well as the zoom in zoom out side bar is also not coming.

If any one have any idea about this problem please reply?

Model Action
acts_as_gmappable

def gmaps4rails_address
html = full_address(city_id,state_id,country_id)
self.location = (location + html)
location
end

def full_address(city_id,state_id,country_id)
city_name = MdmCity.get_city_name(city_id)
state_name = MdmState.get_state_name(state_id)
country_name = MdmCountry.get_country_name(country_id)
html = "#{city_name} #{state_name} #{country_name}"
html
end

Controller Action

def edit_content
@location_json = SeoContent.where(:id =>
params[:id]).first.to_gmaps4rails
end

VIEW

<%= gmaps4rails(@location_json) %>

Issues for me.
1) Zoom In and Zoom out bar is not coming.
2) Marker is not coming at center.
3) How to give Info window.
4) How to raise that address is Invalid, which is not present on google
map (Eg:kdjfkdfhdkfhd)
5) Why this action (def gmaps4rails_address) is calling automatically.
6) I want to call def gmaps4rails_address from update action too how ?
7) Map is coming only one forth ?why
8) Can i show directions on map ?

Thanks
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.