ActionView::Template::Error undefined method

16,919

You're missing the 'r' in 'description' in show.html.erb:

undefined method 'desciption'

<b>Description:</b><%= @ad.desciption %>

Share:
16,919
Ava
Author by

Ava

Beginner!

Updated on June 04, 2022

Comments

  • Ava
    Ava almost 2 years

    I am following Head First Rails which has been written for older version of rails. I am working on its chapter 2 project but in Rails 3. Following are my files.

    ads_controller.rb

    class AdsController < ApplicationController
      def show
        @ad = Ad.find(params[:id])
      end
    
      def index
        @ads = Ad.find(:all)
      end
    end
    

    ad.rb

    class Ad < ActiveRecord::Base
      attr_accessible :description, :email, :img_url, :name, :price, :seller_id
    end
    

    index.html.rb

    </h1>
    <ul>
    <% for ad in @ads %>
      <li><a href="/ads/<%= ad.id %>"><%= ad.name %></a></li>
    <% end %>
    </ul>
    

    show.html.rb

    <body>
        <p>
            <b>Name:</b><%= @ad.name %>
        </p>
        <p>
            <b>Description:</b><%= @ad.desciption %>
        </p>
        <p>
            <b>Price:</b><%= @ad.price %>
        </p>
        <p>
            <b>Seller Id:</b><%= @ad.seller_id %>
        </p>
        <p>
            <b>Email:</b><%= @ad.email %>
        </p>
        <p>
            <img src="<%= @ad.img_url %>"/>
        </p>
    </body>
    

    schema.rb

    ActiveRecord::Schema.define(:version => 20121209174120) do
    
      create_table "ads", :force => true do |t|
        t.string   "name"
        t.text     "description"
        t.decimal  "price"
        t.integer  "seller_id"
        t.string   "email"
        t.string   "img_url"
        t.datetime "created_at",  :null => false
        t.datetime "updated_at",  :null => false
      end
    
    end
    

    Database is populated for all the fields. http://0.0.0.0:3000/ads/ works but http://0.0.0.0:3000/ads/<any number> does not work and throws the following error:

    NoMethodError in Ads#show

    Showing /Users/ava/Projects/mebay/app/views/ads/show.html.erb where line #6 raised:
    
    undefined method `desciption' for #<Ad:0x007f7ff346c100>
    
    Extracted source (around line #6):
    
    3:      <b>Name:</b><%= @ad.name %>
    4:  </p>
    5:  <p>
    6:      <b>Description:</b><%= @ad.desciption %>
    7:  </p>
    8:  <p>
    9:      <b>Price:</b><%= @ad.price %>
    
    Rails.root: /Users/ava/Projects/mebay
    Application Trace | Framework Trace | Full Trace
    
    app/views/ads/show.html.erb:6:in `_app_views_ads_show_html_erb___4217851794431988162_70093760484140'
    

    On server window:

    ActionView::Template::Error (undefined method `desciption' for #<Ad:0x007f7ff346c100>):
        3:      <b>Name:</b><%= @ad.name %>
        4:  </p>
        5:  <p>
        6:      <b>Description:</b><%= @ad.desciption %>
        7:  </p>
        8:  <p>
        9:      <b>Price:</b><%= @ad.price %>
      app/views/ads/show.html.erb:6:in `_app_views_ads_show_html_erb___4217851794431988162_70093760484140'
    

    If I remove description in show.html.rb then it works fine and displays name, price, seller_id and email. What am I doing wrong?

    Ruby version: ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.4.0] Rails version: Rails 3.2.7

    Thanks.