-1

NoMethodError in Quantifieds#index

undefined method `date_value' for #Quantified:0x007ff3fe7d6c08

How do I define date_value & result_value so it works in the quantifieds index?

<!-- Default bootstrap panel contents -->

<div id="values" class="panel panel-default">
  
  <div class="panel-heading"><h4><b>AVERAGE</b></h4></div>

  <!-- Table -->
<table>
  <% @averaged_quantifieds.each do |averaged| %>
    <% if averaged.user == current_user %>
        <th class="value">
          <%= link_to edit_quantified_path(averaged) do %>
          <%= averaged.name %>
          <% end %>
          (<%= averaged.metric %>)
        </th>
      <tbody class="value"> 
          <td><%= averaged.date_value.strftime("%m-%Y") %></td>
          <td><%= averaged.result_value %></td>
      </tbody>
    <% end %>
  <% end %>
</table>
</div>

<br>
<br>
<br>
<br>

<!-- Default bootstrap panel contents -->
<div id="values" class="panel panel-default">
  
  <div class="panel-heading"><h4><b>INSTANCE</b></h4></div>

  <!-- Table -->
<table>
  <% @instance_quantifieds.each do |instance| %>
    <% if instance.user == current_user %>
        <th class="value">
          <%= link_to edit_quantified_path(instance) do %>
          <%= instance.name %>
          <% end %>
          (<%= instance.metric %>)
        </th>
      <tbody class="value"> 
          <td><%= instance.date_value.strftime("%m-%Y") %></td>
          <td><%= instance.result_value %></td>
      </tbody>
    <% end %>
    <% end %>
</table>
</div>

  <div class="values-button">
  <%= link_to new_quantified_path, class: 'btn'  do %>
  <b><span class="glyphicon glyphicon-plus"</span></b>
  <% end %>
  </div>

date_value & result_value are derived from f.simple_fields_for :results in the _form. I am using cocoon to create my nested attributes.

= simple_form_for @quantified do |f|
  .america
    %form
      = f.select :categories, Quantified::CATEGORIES
      %br/
      %br/
      .form-group
        = f.text_field :name,  class: 'form-control', placeholder: 'Enter Name'
      .form-group
        = f.text_field :metric,  class: 'form-control', placeholder: 'Enter Metric'
      #results
        = f.simple_fields_for :results do |result|
          = render 'result_fields', :f => result
        = link_to_add_association 'Add Result', f, :results
      %br/
      = button_tag(type: 'f.submit', class: "btn") do
        %span.glyphicon.glyphicon-plus

.nested-fields
 .form-group
  = f.text_field :result_value, class: 'form-control', placeholder: 'Enter Result'
  %br
  = f.date_select :date_value, :order => [:month, :year], class: 'date-select'
  = link_to_remove_association "Remove Result", f

I think the solution maybe found in altering the controller:

class QuantifiedsController < ApplicationController
  before_action :set_quantified, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index, :show]

  def index
   @quantified = Result.all.order("date_value")
   @averaged_quantifieds = current_user.quantifieds.averaged
   @instance_quantifieds = current_user.quantifieds.instance
  end

  def show
  end

  def new
    @quantified = current_user.quantifieds.build
    @quantified.results.build
  end

  def edit
  end

  def create
    @quantified = current_user.quantifieds.build(quantified_params)
    if @quantified.save
      redirect_to quantifieds_url, notice: 'Quantified was successfully created'
    else
      render action: 'new'
  end
end

  def update
    if @quantified.update(quantified_params)
      redirect_to quantifieds_url, notice: 'Goal was successfully updated'
    else
      render action: 'edit'
  end
end

  def destroy
    @quantified.destroy
    redirect_to quantifieds_url
  end

  private
    def set_quantified
      @quantified = Quantified.find(params[:id])
    end

    def correct_user
      @quantified = current_user.quantifieds.find_by(id: params[:id])
      redirect_to quantifieds_path, notice: "Not authorized to edit this goal" if @quantified.nil?
    end

    def quantified_params
      params.require(:quantified).permit(:categories, :name, :metric, :result, :date, results_attributes: [:id, :result_value, :date_value, :_destroy])
    end
end

Here's some more code to give more context:

routes.rb

Rails.application.routes.draw do

  resources :goals

  resources :values

  resources :quantifieds do
    resources :results
  end
  devise_for :users
  root 'values#index'
  get "about" => "pages#about"

schema.rb

# encoding: UTF-8
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 20150123210404) do

  create_table "goals", force: true do |t|
    t.string   "name"
    t.date     "deadline"
    t.boolean  "accomplished", default: false
    t.datetime "created_at",                   null: false
    t.datetime "updated_at",                   null: false
    t.integer  "user_id"
  end

  add_index "goals", ["deadline"], name: "index_goals_on_deadline"
  add_index "goals", ["user_id"], name: "index_goals_on_user_id"

  create_table "quantifieds", force: true do |t|
    t.string   "categories"
    t.string   "name"
    t.string   "metric"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer  "user_id"
  end

  add_index "quantifieds", ["categories"], name: "index_quantifieds_on_categories"
  add_index "quantifieds", ["user_id"], name: "index_quantifieds_on_user_id"

  create_table "results", force: true do |t|
    t.string   "result_value"
    t.date     "date_value"
    t.integer  "quantified_id"
    t.datetime "created_at",    null: false
    t.datetime "updated_at",    null: false
    t.integer  "user_id"
  end

  add_index "results", ["quantified_id"], name: "index_results_on_quantified_id"
  add_index "results", ["user_id"], name: "index_results_on_user_id"

  create_table "users", force: true do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true
  add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true

  create_table "values", force: true do |t|
    t.string   "name"
    t.string   "categories"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer  "user_id"
  end

  add_index "values", ["categories"], name: "index_values_on_categories"
  add_index "values", ["user_id"], name: "index_values_on_user_id"

end

_create_results.rb

class CreateResults < ActiveRecord::Migration
  def change
    create_table :results do |t|
      t.string :result_value
      t.date :date_value
      t.belongs_to :quantified, index: true

      t.timestamps null: false
    end
    add_foreign_key :results, :quantifieds
  end
end

_add_user_id_to_results.rb

class AddUserIdToResults < ActiveRecord::Migration
  def change
    add_column :results, :user_id, :integer
    add_index :results, :user_id
  end
end

quantified.rb

class Quantified < ActiveRecord::Base
 belongs_to :user
  scope :averaged,  -> { where(categories: 'averaged') }
  scope :instance,  -> { where(categories: 'instance') }
  has_many :results
 accepts_nested_attributes_for :results, :reject_if => :all_blank, :allow_destroy => true

 CATEGORIES = ['averaged', 'instance']

end

result.rb

class Result < ActiveRecord::Base
 belongs_to :user
  belongs_to :quantified
end

Full trace

activemodel (4.2.0.rc3) lib/active_model/attribute_methods.rb:433:in `method_missing'
app/views/quantifieds/index.html.erb:18:in `block in _app_views_quantifieds_index_html_erb__3407997734302574408_70263238235460'
activerecord (4.2.0.rc3) lib/active_record/relation/delegation.rb:46:in `each'
activerecord (4.2.0.rc3) lib/active_record/relation/delegation.rb:46:in `each'
app/views/quantifieds/index.html.erb:9:in `_app_views_quantifieds_index_html_erb__3407997734302574408_70263238235460'
actionview (4.2.0.rc3) lib/action_view/template.rb:145:in `block in render'
activesupport (4.2.0.rc3) lib/active_support/notifications.rb:166:in `instrument'
actionview (4.2.0.rc3) lib/action_view/template.rb:333:in `instrument'
actionview (4.2.0.rc3) lib/action_view/template.rb:143:in `render'
actionview (4.2.0.rc3) lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template'
actionview (4.2.0.rc3) lib/action_view/renderer/abstract_renderer.rb:39:in `block in instrument'
activesupport (4.2.0.rc3) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.0.rc3) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.0.rc3) lib/active_support/notifications.rb:164:in `instrument'
actionview (4.2.0.rc3) lib/action_view/renderer/abstract_renderer.rb:39:in `instrument'
actionview (4.2.0.rc3) lib/action_view/renderer/template_renderer.rb:53:in `block in render_template'
actionview (4.2.0.rc3) lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout'
actionview (4.2.0.rc3) lib/action_view/renderer/template_renderer.rb:52:in `render_template'
actionview (4.2.0.rc3) lib/action_view/renderer/template_renderer.rb:14:in `render'
actionview (4.2.0.rc3) lib/action_view/renderer/renderer.rb:42:in `render_template'
actionview (4.2.0.rc3) lib/action_view/renderer/renderer.rb:23:in `render'
actionview (4.2.0.rc3) lib/action_view/rendering.rb:100:in `_render_template'
actionpack (4.2.0.rc3) lib/action_controller/metal/streaming.rb:217:in `_render_template'
actionview (4.2.0.rc3) lib/action_view/rendering.rb:83:in `render_to_body'
actionpack (4.2.0.rc3) lib/action_controller/metal/rendering.rb:32:in `render_to_body'
actionpack (4.2.0.rc3) lib/action_controller/metal/renderers.rb:37:in `render_to_body'
actionpack (4.2.0.rc3) lib/abstract_controller/rendering.rb:25:in `render'
actionpack (4.2.0.rc3) lib/action_controller/metal/rendering.rb:16:in `render'
actionpack (4.2.0.rc3) lib/action_controller/metal/instrumentation.rb:41:in `block (2 levels) in render'
activesupport (4.2.0.rc3) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
/Users/galli01anthony/.rvm/rubies/ruby-2.1.3/lib/ruby/2.1.0/benchmark.rb:294:in `realtime'
activesupport (4.2.0.rc3) lib/active_support/core_ext/benchmark.rb:12:in `ms'
actionpack (4.2.0.rc3) lib/action_controller/metal/instrumentation.rb:41:in `block in render'
actionpack (4.2.0.rc3) lib/action_controller/metal/instrumentation.rb:84:in `cleanup_view_runtime'
activerecord (4.2.0.rc3) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
actionpack (4.2.0.rc3) lib/action_controller/metal/instrumentation.rb:40:in `render'
actionpack (4.2.0.rc3) lib/action_controller/metal/implicit_render.rb:10:in `default_render'
actionpack (4.2.0.rc3) lib/action_controller/metal/implicit_render.rb:5:in `send_action'
actionpack (4.2.0.rc3) lib/abstract_controller/base.rb:198:in `process_action'
actionpack (4.2.0.rc3) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.2.0.rc3) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:117:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:117:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:151:in `block in halting_and_conditional'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:151:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:151:in `block in halting_and_conditional'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:151:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:151:in `block in halting_and_conditional'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:234:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:234:in `block in halting'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:234:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:234:in `block in halting'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:169:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:169:in `block in halting'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:169:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:169:in `block in halting'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:169:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:169:in `block in halting'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:92:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:92:in `_run_callbacks'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:734:in `_run_process_action_callbacks'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.0.rc3) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (4.2.0.rc3) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.2.0.rc3) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
activesupport (4.2.0.rc3) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.0.rc3) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.0.rc3) lib/active_support/notifications.rb:164:in `instrument'
actionpack (4.2.0.rc3) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.2.0.rc3) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
activerecord (4.2.0.rc3) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.2.0.rc3) lib/abstract_controller/base.rb:137:in `process'
actionview (4.2.0.rc3) lib/action_view/rendering.rb:30:in `process'
actionpack (4.2.0.rc3) lib/action_controller/metal.rb:195:in `dispatch'
actionpack (4.2.0.rc3) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.2.0.rc3) lib/action_controller/metal.rb:236:in `block in action'
actionpack (4.2.0.rc3) lib/action_dispatch/routing/route_set.rb:73:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
actionpack (4.2.0.rc3) lib/action_dispatch/routing/route_set.rb:42:in `serve'
actionpack (4.2.0.rc3) lib/action_dispatch/journey/router.rb:43:in `block in serve'
actionpack (4.2.0.rc3) lib/action_dispatch/journey/router.rb:30:in `each'
actionpack (4.2.0.rc3) lib/action_dispatch/journey/router.rb:30:in `serve'
actionpack (4.2.0.rc3) lib/action_dispatch/routing/route_set.rb:802:in `call'
warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
warden (1.2.3) lib/warden/manager.rb:34:in `catch'
warden (1.2.3) lib/warden/manager.rb:34:in `call'
rack (1.6.0) lib/rack/etag.rb:24:in `call'
rack (1.6.0) lib/rack/conditionalget.rb:25:in `call'
rack (1.6.0) lib/rack/head.rb:13:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/flash.rb:260:in `call'
rack (1.6.0) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.6.0) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.2.0.rc3) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.2.0.rc3) lib/active_record/connection_adapters/abstract/connection_pool.rb:647:in `call'
activerecord (4.2.0.rc3) lib/active_record/migration.rb:378:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:88:in `call'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:88:in `_run_callbacks'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:734:in `_run_call_callbacks'
activesupport (4.2.0.rc3) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.0.rc3) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.0.rc3) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.0.rc3) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.0.rc3) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.0.rc3) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.0.rc3) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.0) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.0) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.0.rc3) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.0) lib/rack/lock.rb:17:in `call'
actionpack (4.2.0.rc3) lib/action_dispatch/middleware/static.rb:113:in `call'
rack (1.6.0) lib/rack/sendfile.rb:113:in `call'
railties (4.2.0.rc3) lib/rails/engine.rb:518:in `call'
railties (4.2.0.rc3) lib/rails/application.rb:164:in `call'
rack (1.6.0) lib/rack/lock.rb:17:in `call'
rack (1.6.0) lib/rack/content_length.rb:15:in `call'
rack (1.6.0) lib/rack/handler/webrick.rb:89:in `service'
/Users/galli01anthony/.rvm/rubies/ruby-2.1.3/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
/Users/galli01anthony/.rvm/rubies/ruby-2.1.3/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
/Users/galli01anthony/.rvm/rubies/ruby-2.1.3/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'

Please let me know if you need any more code or comments to bring this question to a resolution. God speed.

Andrew Grimm
  • 78,473
  • 57
  • 200
  • 338
AnthonyGalli.com
  • 2,796
  • 5
  • 31
  • 80
  • 2
    Dude, too much code! The short answer seems to be that you don't have a date_value and a result_value column in the database for the quantifieds table, so where do these values come from? Did you mean to use created_at and metric? – Satya Jan 24 '15 at 20:10
  • Sorry I'll add less code in the future. I'm trying to pull those values in from the "results" table into the "quantified" table because the results are a nested attribute of quantified. As you can see I created the appropriate relationships in the rb files, but my guess is that I'm leaving something out in the Quantifieds controller. I could be mistaken. @Satya – AnthonyGalli.com Jan 24 '15 at 23:02
  • I tried adding those values you listed to the quantified table, but now I get this error: undefined method `strftime'. I reverted back the code so the problem still lies: undefined method `date_value'. @Satya – AnthonyGalli.com Jan 24 '15 at 23:12
  • I think you have to do something with `simple_fields_for` in your view, which I have never used, so you're on your own there, sorry. As for `strftime`, that only works on `Time` or `DateTime` objects. Once your nested models are correctly set up, you can use `strftime`just fine. – Satya Jan 25 '15 at 05:18
  • Speaking of models, can you show the `quantified` and `result` models? – Satya Jan 25 '15 at 05:21
  • @Satya I added the code as requested =] – AnthonyGalli.com Jan 25 '15 at 17:45
  • Do you have the stacktrace (the lines following the error message) for the NoMethodError? As Kelseydh points out below, the stacktrace is more interesting than the actual error message. – Satya Jan 26 '15 at 14:36
  • Thks @Satya! I added the full trace to the bottom. And now I know why it's called stackoverflow ;) – AnthonyGalli.com Jan 26 '15 at 20:17
  • Alright, so that's coming from the view, I think from the `averaged.date_value` and `averaged.result_value`. Because `averaged` is an instance of Quantified, and `date_value` and `result_value` are attributes of `Result` instances. Now you have a Quantified has_many Result(s) going on, so how does a Quantified get a single date_value and result_value? Might help to state it in domain terms, i.e. what you're trying to achieve. I don't think the forms (and nested attributes) are in play at all for this particular error. – Satya Jan 27 '15 at 13:52

1 Answers1

2

Answer to Your Specific Problem:

In your index action you have:

@quantified = Result.all.order("date_value")

Calling .all before .order is the cause of your error.

In Rails ActiveRecord, the .all command immediately triggers a fetch of items from the database.

Since database IO fetching commands like .where and .order exist to shape how (or what) data is fetched from the database, you need to call them in your code before a database retrieval gets triggered by a command like .all:

@quantified = Result.order("date_value").all

For better clarity it may be ideal to specify ascending or descending ordering in this query, e.g. Result.order("date_value ASC").all, or if the data always gets used in this order, to make your ordering a default_scope within the Result model.


General Advice When Debugging Undefined Method "method_name" errors:

In your question I noticed you didn't include the class information of the object affected by your error, making it hard to diagnose correctly the source of your problem (whether you had the correct object).

TIP: When diagnosing an error, check that an object exists FIRST before looking into the method flagged by the error.

Why? Because many undefined method "method_name" errors are not actually caused by method_name being undefined, but rather because the object itself is nil or an incorrect class.

NoMethodError: undefined method 'method_name' can be a red herring that misleads you when you have an object that isn't loaded or instantiated.

To properly diagnose a NoMethodError, it's essential to check first that an object's class is defined correctly before you start trying to debug it. Without doing this, it's very easy to go down a rabbit hole looking into problems that might exist with method_name, when really the problem lies with your object not existing.

To check an object's class within an undefined method error just look for the for xxx:Class part of the error. This describes the object & its class. If your object is nil or doesn't exist, the undefined method error will display for nil:NilClass.

NoMethodError: undefined method `date_time' for nil:NilClass

Unfortunately its easy here to get focused on the date_time part of this error message, and not that the NoMethodError message is referencing a nil class. In a NoMethodError like above where our object is nil, 'date_time' simply represents a point in code where we unsucessfully called a method against a nil object. To solve a NoMethodError on a nil:NilClass object correctly, what matters is looking into why the object itself is not instantiating.

Kelsey Hannan
  • 2,857
  • 2
  • 30
  • 46