0
votes

In my development environment, the page loads fine. In production, I get this error:

NameError (uninitialized constant EventTypesController::EventType): app/controllers/event_types_controller.rb:3:in `index'

Here is my controller:

class EventTypesController < ApplicationController
  def index
    @event_types = EventType.all
  end

  def update_event_type
    event_type = EventType.find_by_id(params[:id])
    if event_type.update(event_type_params)
      flash[:notice] = 'Event Type Updated'
      redirect_to :action => :index
    end
  end

  def create_event_type
    event_type = EventType.new(event_type_params)
    if event_type.save
      flash[:notice] = 'Event Type Created'
      redirect_to :action => :index
    end
  end

  def destroy_event_type
    event_type = EventType.find_by_id(params[:id])
    if event_type.destroy
      flash[:notice] = 'Event Type Deleted'
      redirect_to :action => :index
    end
  end

  def event_type_params
    params.require('eventtype').permit('description')
  end
end

Here is my View:

<h1>Event Types</h1>

<table>
  <tr>
    <th>Event Type Description</th>
    <th></th>
  </tr>
  <% @event_types.each do |eventtype| %>
    <% if params[:edit] && params[:edit] == eventtype.id.to_s %>
      <tr>
        <%=form_for :eventtype, :url => {:action => 'update_event_type', :id => eventtype } do |form| -%>
          <td><%= form.text_field :description %></td>
            <td><%= submit_tag("Update") %>
            <%= link_to 'Cancel', {:action => :index} %></td>
        <%end%>
      </tr>
      <%else%>
        <tr>
          <td><%= eventtype.description %></td>
          <td><%=link_to "Edit", {:edit => eventtype.id} %>
            <%=link_to "Delete", {:action => 'destroy_event_type', :id => eventtype.id},:method => :delete ,data: {confirm:'Are you sure you want to delete this event type?'} %></td>
        </tr>
    <%end%>
  <%end%>
  <% if !params[:edit] %>
      <%=form_for :eventtype, :url => {:action => 'create_event_type' } do |form| -%>
        <tr>
          <td><%= form.text_field :description %></td>
          <td><%= submit_tag("Add Event Type") %></td>
        </tr>
      <%end%>
  <%end%>
</table>

Any idea what I am doing wrong?

This is what happens when I type EventType into production console:

irb(main):004:0> EventType NameError: uninitialized constant EventType from (irb):4 from /home/deploy/track/shared/bundle/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/console.rb:110:in start' from /home/deploy/track/shared/bundle/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/console.rb:9:instart' from /home/deploy/track/shared/bundle/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:68:in console' from /home/deploy/track/shared/bundle/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:39:inrun_command!' from /home/deploy/track/shared/bundle/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands.rb:17:in <top (required)>' from bin/rails:4:inrequire' from bin/rails

ByeBug Results:

EventType EventType EventType(id: integer, description: string, created_at: datetime, updated_at: datetime) (byebug)

1
Is your production code up to date? Did you run rake db:migrate in production?vich
yes i did and i verified the table was created in MySQL. I also manually added records via SQL.Devon Quick
That's strange then. I would suggest you use a debugger (e.g. byebug) to inspect your index action, and check to see that the EventType class is defined. It seems weird to me that it would work locally and not in production if the code and db are up to date.vich
What happens when you open production rails console and type EventType?Petr Gazarov
What is the complete path where you defined the model?Petr Gazarov

1 Answers

0
votes

Perhaps EventType table is found in development and not production.

Have you successfully migrated the EventType table to production?

$ bin/rails db:migrate RAILS_ENV=production