错误 - 未初始化的常量Project :: Ticket

时间:2014-03-12 17:13:39

标签: ruby-on-rails

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

项目的模板 - show.html.erb

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

我收到错误:uninitialized constant Project::Ticket显示模板的第一行

这是我的路线文件

resources :projects do
  resources :tickets
end

回溯

'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)'
     

完整追踪 -

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

lib / active_record / reflection.rb:178:klass' activerecord (4.0.1) lib/active_record/associations/association.rb:123:in klass&#39;   activerecord(4.0.1)   LIB / active_record /协会/ collection_association.rb:37:在   reader' activerecord (4.0.1) lib/active_record/associations/builder/association.rb:70:in车票&#39;   应用程序/视图/项目/ show.html.erb:14:   _app_views_projects_show_html_erb__1061934704_22827060' actionpack (4.0.1) lib/action_view/template.rb:143:in阻止渲染&#39;   activesupport(4.0.1)lib / active_support / notifications.rb:161:in   instrument' actionpack (4.0.1) lib/action_view/template.rb:141:in 渲染&#39; actionpack(4.0.1)   lib / action_view / renderer / template_renderer.rb:49:在block (2 levels) in render_template' actionpack (4.0.1) lib/action_view/renderer/abstract_renderer.rb:38:in块中   仪器&#39; activesupport(4.0.1)   lib / active_support / notifications.rb:159:在block in instrument' activesupport (4.0.1) lib/active_support/notifications/instrumenter.rb:20:in工具&#39;   activesupport(4.0.1)lib / active_support / notifications.rb:1515:in   instrument' actionpack (4.0.1) lib/action_view/renderer/abstract_renderer.rb:38:in仪器&#39;   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&#39; actionpack(4.0.1)   lib / action_view / renderer / template_renderer.rb:47:在render_template' actionpack (4.0.1) lib/action_view/renderer/template_renderer.rb:17:in 渲染&#39; 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:in渲染&#39; actionpack(4.0.1)   lib / abstract_controller / rendering.rb:127:在_render_template' actionpack (4.0.1) lib/action_controller/metal/streaming.rb:219:in _ render_template&#39; actionpack(4.0.1)   lib / abstract_controller / rendering.rb:120:在render_to_body' actionpack (4.0.1) lib/action_controller/metal/rendering.rb:33:in render_to_body&#39; actionpack(4.0.1)   lib / action_controller / metal / renderers.rb:26:在render_to_body' actionpack (4.0.1) lib/abstract_controller/rendering.rb:97:in渲染&#39;   actionpack(4.0.1)lib / action_controller / metal / rendering.rb:16:in   render' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:41:in阻止(2级)   在渲染&#39; 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:in实时&#39;的ActiveSupport   (4.0.1)lib / active_support / core_ext / benchmark.rb:12:在ms' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:41:in块中   渲染&#39; actionpack(4.0.1)   LIB / action_controller /金属/ instrumentation.rb:84:在   cleanup_view_runtime' activerecord (4.0.1) lib/active_record/railties/controller_runtime.rb:25:in cleanup_view_runtime&#39; actionpack(4.0.1)   lib / action_controller / metal / instrumentation.rb:40:在render' actionpack (4.0.1) lib/action_controller/metal/implicit_render.rb:10:in default_render&#39;   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:in process_action&#39; ActionPack的   (4.0.1)lib / action_controller / metal / rendering.rb:10:in   进程中的process_action' actionpack (4.0.1) lib/abstract_controller/callbacks.rb:18:in阻止&#39;   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:in run_callbacks&#39; ActionPack的   (4.0.1)lib / abstract_controller / callbacks.rb:17:在process_action' actionpack (4.0.1) lib/action_controller/metal/rescue.rb:29:in process_action&#39; actionpack(4.0.1)   lib / action_controller / metal / instrumentation.rb:31:在block in process_action' activesupport (4.0.1) lib/active_support/notifications.rb:159:in块中的仪器&#39;   activesupport(4.0.1)   lib / active_support / notifications / instrumenter.rb:20:在instrument' activesupport (4.0.1) lib/active_support/notifications.rb:159:in 工具&#39; actionpack(4.0.1)   lib / action_controller / metal / instrumentation.rb:30:在process_action' actionpack (4.0.1) lib/action_controller/metal/params_wrapper.rb:245:in process_action&#39;   activerecord(4.0.1)   LIB / active_record / railties / controller_runtime.rb:18:在   process_action' actionpack (4.0.1) lib/abstract_controller/base.rb:136:in过程&#39; actionpack(4.0.1)   lib / abstract_controller / rendering.rb:44:在process' actionpack (4.0.1) lib/action_controller/metal.rb:195:in发送&#39; 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 阻止行动&#39; actionpack(4.0.1)   lib / action_dispatch / routing / route_set.rb:80:在call' actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:80:in发送&#39;   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 阻止通话&#39; actionpack(4.0.1)   lib / action_dispatch / journey / router.rb:59:each' actionpack (4.0.1) lib/action_dispatch/journey/router.rb:59:in来电&#39; actionpack(4.0.1)   lib / action_dispatch / routing / route_set.rb:680:call' rack (1.5.2) lib/rack/etag.rb:23:in来电&#39;机架(1.5.2)   lib / rack / conditionalget.rb:25:in call' rack (1.5.2) lib/rack/head.rb:11:in来电&#39; 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 来电&#39; rack(1.5.2)lib / rack / session / abstract / id.rb:225:在context' rack (1.5.2) lib/rack/session/abstract/id.rb:220:in电话&#39; ActionPack的   (4.0.1)lib / action_dispatch / middleware / cookies.rb:486:在call' activerecord (4.0.1) lib/active_record/query_cache.rb:36:in电话&#39;   activerecord(4.0.1)   LIB / active_record / connection_adapters /抽象/ connection_pool.rb:626:在   call' activerecord (4.0.1) lib/active_record/migration.rb:369:in 呼叫&#39; actionpack(4.0.1)   lib / action_dispatch / middleware / callbacks.rb:29:在block in call' activesupport (4.0.1) lib/active_support/callbacks.rb:373:in _ run__388525736__call__callbacks&#39; activesupport(4.0.1)   lib / active_support / callbacks.rb:80:in run_callbacks' actionpack (4.0.1) lib/action_dispatch/middleware/callbacks.rb:27:in来电&#39;   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:in呼叫&#39; 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:in呼叫&#39;   railties(4.0.1)lib / rails / rack / logger.rb:38:in call_app' railties (4.0.1) lib/rails/rack/logger.rb:20:in阻止电话&#39;的ActiveSupport   (4.0.1)lib / active_support / tagged_logging.rb:67:在block in tagged' activesupport (4.0.1) lib/active_support/tagged_logging.rb:25:in 标记的&#39; activesupport(4.0.1)   lib / active_support / tagged_logging.rb:67:在tagged' railties (4.0.1) lib/rails/rack/logger.rb:20:in来电&#39; actionpack(4.0.1)   lib / action_dispatch / middleware / request_id.rb:21:in call' rack (1.5.2) lib/rack/methodoverride.rb:21:in来电&#39;机架(1.5.2)   lib / rack / runtime.rb:17:in call' activesupport (4.0.1) lib/active_support/cache/strategy/local_cache.rb:83:in call&#39;架   (1.5.2)lib / rack / lock.rb:17:in call' actionpack (4.0.1) lib/action_dispatch/middleware/static.rb:64:in call&#39;机架(1.5.2)   lib / rack / sendfile.rb:112:call' railties (4.0.1) lib/rails/engine.rb:511:in来电&#39;铁路(4.0.1)   lib / rails / application.rb:97:in call' rack (1.5.2) lib/rack/lock.rb:17:in call&#39;机架(1.5.2)   lib / rack / content_length.rb:14:in call' rack (1.5.2) lib/rack/handler/webrick.rb:60:in service&#39;   C:/Ruby193/lib/ruby/1.9.1/webrick/httpserver.rb:138:in service' C:/Ruby193/lib/ruby/1.9.1/webrick/httpserver.rb:94:in run&#39;   C:/Ruby193/lib/ruby/1.9.1/webrick/server.rb:191:在`block in   start_thread&#39;

 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 个答案:

答案 0 :(得分:0)

没关系。之前的回答是不正确的。

根据你设置的guides应该有效。

您是否检查过以确保@project = Project.for(current_user).find(params[:project_id])有效?最好做一个if语句检查是否存在@project而不是rescue

答案 1 :(得分:0)

有一些模型,Rails无法在您的情况下正确复数/单一化。因此,它无法从关联中获取类名。

指定关联以及类名。

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

在协会的另一边belongs_to做类似的事情。

正如另一个答案中所建议的那样,您必须拥有Ticket模型。如果这是正确的,那么在这种情况下你不必设置class_name

答案 2 :(得分:0)

您是否定义了故障单模型?如果模型票证不存在,这是您将获得的错误。也许你已经将它命名为不同的东西。请注意the class name is inferred from the name of the association