6
votes
class TicketsController < ApplicationController
  before_action :set_project
  before_action :set_ticket, only: [:show, :edit, :update, :destroy]



  def show
  end

  def set_ticket
    @ticket = @project.tickets.find(params[:id])
  end

  def set_project
    @project = Project.for(current_user).find(params[:project_id])
    rescue ActiveRecord::RecordNotFound
    flash[:alert] = "The project you were looking " +"for could not be found."
    redirect_to root_path
  end

end

project's template- show.html.erb

<% @project.tickets.each do |ticket| %> 
  <li>
    #<%= ticket.id %> - <%= link_to ticket.title, [@project, ticket] %>
  </li>
<% end %>

I am getting error: uninitialized constant Project::Ticket the first line of show template

This is in my routes file

resources :projects do
  resources :tickets
end

backtrace

'Started GET "/projects/6" for 127.0.0.1 at 2014-03-12 21:47:37 +0530
Processing by ProjectsController#show as HTML
Parameters: {"id"=>"6"}
←[1m←[35mUser Load (0.0ms)←[0m  SELECT "users".* FROM "users" WHERE "users"."i
d" = ? LIMIT 1  [["id", 4]]
←[1m←[36mProject Load (0.0ms)←[0m  ←[1mSELECT "projects".* FROM "projects" WHE
RE "projects"."id" = ? LIMIT 1←[0m  [["id", "6"]]
←[1m←[35mPermission Load (0.0ms)←[0m  SELECT "permissions".* FROM "permissions
" WHERE "permissions"."user_id" = ?  [["user_id", 4]]
Rendered projects/show.html.erb within layouts/application (19.0ms)
Completed 500 Internal Server Error in 27ms

ActionView::Template::Error (uninitialized constant Project::Ticket):
11: <% end %>
12:
13: <ul id='tickets'>
14: <% @project.tickets.each do |ticket| %>
15: <li>
16: #<%= ticket.id %> - <%= link_to ticket.title, [@project, ticket] %>
17: </li>
app/views/projects/show.html.erb:14:in `_app_views_projects_show_html_erb__106
1934704_22827060'


Rendered C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-4.0.1/lib/action_dispa
tch/middleware/templates/rescues/_trace.erb (2.0ms)
Rendered C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-4.0.1/lib/action_dispa
tch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
Rendered C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-4.0.1/lib/action_dispa
tch/middleware/templates/rescues/template_error.erb within rescues/layout (35.0m
s)'

full trace-

activerecord (4.0.1) lib/active_record/inheritance.rb:125:in `compute_type' activerecord (4.0.1)

lib/active_record/reflection.rb:178:in klass' activerecord (4.0.1) lib/active_record/associations/association.rb:123:inklass' activerecord (4.0.1) lib/active_record/associations/collection_association.rb:37:in reader' activerecord (4.0.1) lib/active_record/associations/builder/association.rb:70:intickets' app/views/projects/show.html.erb:14:in _app_views_projects_show_html_erb__1061934704_22827060' actionpack (4.0.1) lib/action_view/template.rb:143:inblock in render' activesupport (4.0.1) lib/active_support/notifications.rb:161:in instrument' actionpack (4.0.1) lib/action_view/template.rb:141:in render' actionpack (4.0.1) lib/action_view/renderer/template_renderer.rb:49:in block (2 levels) in render_template' actionpack (4.0.1) lib/action_view/renderer/abstract_renderer.rb:38:inblock in instrument' activesupport (4.0.1) lib/active_support/notifications.rb:159:in block in instrument' activesupport (4.0.1) lib/active_support/notifications/instrumenter.rb:20:ininstrument' activesupport (4.0.1) lib/active_support/notifications.rb:159:in instrument' actionpack (4.0.1) lib/action_view/renderer/abstract_renderer.rb:38:ininstrument' actionpack (4.0.1) lib/action_view/renderer/template_renderer.rb:48:in block in render_template' actionpack (4.0.1) lib/action_view/renderer/template_renderer.rb:56:in render_with_layout' actionpack (4.0.1) lib/action_view/renderer/template_renderer.rb:47:in render_template' actionpack (4.0.1) lib/action_view/renderer/template_renderer.rb:17:in render' actionpack (4.0.1) lib/action_view/renderer/renderer.rb:42:in render_template' actionpack (4.0.1) lib/action_view/renderer/renderer.rb:23:inrender' actionpack (4.0.1) lib/abstract_controller/rendering.rb:127:in _render_template' actionpack (4.0.1) lib/action_controller/metal/streaming.rb:219:in _render_template' actionpack (4.0.1) lib/abstract_controller/rendering.rb:120:in render_to_body' actionpack (4.0.1) lib/action_controller/metal/rendering.rb:33:in render_to_body' actionpack (4.0.1) lib/action_controller/metal/renderers.rb:26:in render_to_body' actionpack (4.0.1) lib/abstract_controller/rendering.rb:97:inrender' actionpack (4.0.1) lib/action_controller/metal/rendering.rb:16:in render' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:41:inblock (2 levels) in render' activesupport (4.0.1) lib/active_support/core_ext/benchmark.rb:12:in block in ms' C:/Ruby193/lib/ruby/1.9.1/benchmark.rb:295:inrealtime' activesupport (4.0.1) lib/active_support/core_ext/benchmark.rb:12:in ms' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:41:inblock in render' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:84:in cleanup_view_runtime' activerecord (4.0.1) lib/active_record/railties/controller_runtime.rb:25:in cleanup_view_runtime' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:40:in render' actionpack (4.0.1) lib/action_controller/metal/implicit_render.rb:10:indefault_render' actionpack (4.0.1) lib/action_controller/metal/implicit_render.rb:5:in send_action' actionpack (4.0.1) lib/abstract_controller/base.rb:189:inprocess_action' actionpack (4.0.1) lib/action_controller/metal/rendering.rb:10:in process_action' actionpack (4.0.1) lib/abstract_controller/callbacks.rb:18:inblock in process_action' activesupport (4.0.1) lib/active_support/callbacks.rb:433:in _run__975686654__process_action__callbacks' activesupport (4.0.1) lib/active_support/callbacks.rb:80:inrun_callbacks' actionpack (4.0.1) lib/abstract_controller/callbacks.rb:17:in process_action' actionpack (4.0.1) lib/action_controller/metal/rescue.rb:29:in process_action' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:31:in block in process_action' activesupport (4.0.1) lib/active_support/notifications.rb:159:inblock in instrument' activesupport (4.0.1) lib/active_support/notifications/instrumenter.rb:20:in instrument' activesupport (4.0.1) lib/active_support/notifications.rb:159:in instrument' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:30:in process_action' actionpack (4.0.1) lib/action_controller/metal/params_wrapper.rb:245:inprocess_action' activerecord (4.0.1) lib/active_record/railties/controller_runtime.rb:18:in process_action' actionpack (4.0.1) lib/abstract_controller/base.rb:136:inprocess' actionpack (4.0.1) lib/abstract_controller/rendering.rb:44:in process' actionpack (4.0.1) lib/action_controller/metal.rb:195:indispatch' actionpack (4.0.1) lib/action_controller/metal/rack_delegation.rb:13:in dispatch' actionpack (4.0.1) lib/action_controller/metal.rb:231:in block in action' actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:80:in call' actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:80:indispatch' actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:48:in call' actionpack (4.0.1) lib/action_dispatch/journey/router.rb:71:in block in call' actionpack (4.0.1) lib/action_dispatch/journey/router.rb:59:in each' actionpack (4.0.1) lib/action_dispatch/journey/router.rb:59:incall' actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:680:in call' rack (1.5.2) lib/rack/etag.rb:23:incall' rack (1.5.2) lib/rack/conditionalget.rb:25:in call' rack (1.5.2) lib/rack/head.rb:11:incall' actionpack (4.0.1) lib/action_dispatch/middleware/params_parser.rb:27:in call' actionpack (4.0.1) lib/action_dispatch/middleware/flash.rb:241:in call' rack (1.5.2) lib/rack/session/abstract/id.rb:225:in context' rack (1.5.2) lib/rack/session/abstract/id.rb:220:incall' actionpack (4.0.1) lib/action_dispatch/middleware/cookies.rb:486:in call' activerecord (4.0.1) lib/active_record/query_cache.rb:36:incall' activerecord (4.0.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in call' activerecord (4.0.1) lib/active_record/migration.rb:369:in call' actionpack (4.0.1) lib/action_dispatch/middleware/callbacks.rb:29:in block in call' activesupport (4.0.1) lib/active_support/callbacks.rb:373:in _run__388525736__call__callbacks' activesupport (4.0.1) lib/active_support/callbacks.rb:80:in run_callbacks' actionpack (4.0.1) lib/action_dispatch/middleware/callbacks.rb:27:incall' actionpack (4.0.1) lib/action_dispatch/middleware/reloader.rb:64:in call' actionpack (4.0.1) lib/action_dispatch/middleware/remote_ip.rb:76:incall' actionpack (4.0.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in call' actionpack (4.0.1) lib/action_dispatch/middleware/show_exceptions.rb:30:incall' railties (4.0.1) lib/rails/rack/logger.rb:38:in call_app' railties (4.0.1) lib/rails/rack/logger.rb:20:inblock in call' activesupport (4.0.1) lib/active_support/tagged_logging.rb:67:in block in tagged' activesupport (4.0.1) lib/active_support/tagged_logging.rb:25:in tagged' activesupport (4.0.1) lib/active_support/tagged_logging.rb:67:in tagged' railties (4.0.1) lib/rails/rack/logger.rb:20:incall' actionpack (4.0.1) lib/action_dispatch/middleware/request_id.rb:21:in call' rack (1.5.2) lib/rack/methodoverride.rb:21:incall' rack (1.5.2) lib/rack/runtime.rb:17:in call' activesupport (4.0.1) lib/active_support/cache/strategy/local_cache.rb:83:incall' rack (1.5.2) lib/rack/lock.rb:17:in call' actionpack (4.0.1) lib/action_dispatch/middleware/static.rb:64:incall' rack (1.5.2) lib/rack/sendfile.rb:112:in call' railties (4.0.1) lib/rails/engine.rb:511:incall' railties (4.0.1) lib/rails/application.rb:97:in call' rack (1.5.2) lib/rack/lock.rb:17:incall' rack (1.5.2) lib/rack/content_length.rb:14:in call' rack (1.5.2) lib/rack/handler/webrick.rb:60:inservice' C:/Ruby193/lib/ruby/1.9.1/webrick/httpserver.rb:138:in service' C:/Ruby193/lib/ruby/1.9.1/webrick/httpserver.rb:94:inrun' C:/Ruby193/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'

 class Project < ActiveRecord::Base

 has_many :tickets, dependent: :destroy

has_many :permissions, as: :thing
scope :viewable_by, ->(user) do
    joins(:permissions).where(permissions: { action: "view",
        user_id: user.id })
end

  scope :for, ->(user) do
    user.admin? ? Project.all : Project.viewable_by(user)
  end
  validates :name, presence: true

 end
3
Can you tell the exact location of the error and add that line to the question?Nerve
i wrote it that error is on the first line of show template that is -<% @project.tickets.each do |ticket| %>dips
Can you actually show the backtrace?Leo Correa
Sorry m new here... What is backtrace?dips
The complete exception that gets displayed on screen. all the lines shows where the exception originated and how it propagated.Nerve

3 Answers

1
votes

There is some model which Rails is not able to pluralize/singularize correctly in your case. Thus, it is not able to fetch the class name from associations.

Specify the associations along with classnames.

has_many :tickets, class_name: Ticket, dependent: :destroy

Do similar on the other side belongs_to of the association.

As suggested in another answer, you must have a Ticket model. If this is correctly present, then you should not have to set class_name in this case.

0
votes

Nevermind. The previous answer was incorrect.

According to the guides what you have setup should work.

Have you checked to make sure that @project = Project.for(current_user).find(params[:project_id]) works? It might be better to do an if statement to check to see if @project exists rather than do the rescue.

0
votes

Have you defined a Ticket model? This is the error you'd get if the model Ticket doesn't exist. Maybe you have named it something different. Keep in mind that the class name is inferred from the name of the association.