ruby-on-rails - 调用 destroy 方法会出现错误 - undefined method `name' for nil :NilClass - Rails 4

标签 ruby-on-rails ruby-on-rails-4

尝试删除产品时,我收到此错误

NoMethodError in ProductsController#destroy
undefined method `name' for nil:NilClass

Controller :

class ProductsController < ApplicationController
 before_action :set_product, only: [:show, :edit, :update, :destroy]

 def destroy
  @product.destroy <-------error highlights on this line
  respond_to do |format|
   format.html { redirect_to some_path }
   format.json { head :no_content }
  end
 end

 private

 def set_product
  @product = Product.find(params[:id])
 end

型号:

class Product < ActiveRecord::Base

 belongs_to :category
 belongs_to :sub_category

 has_one :item , :dependent => :delete
 has_many :carts, :dependent => :delete_all
 has_many :assets , :dependent => :delete_all

end

查看:

<%= link_to image_tag('delete.png'), product, method: :delete, data: { confirm: 'Are you sure?' } %>

从弹出窗口中单击“确定”后,它会抛出上述错误。@product 存在,我已检查过。

在开发模式下,它运行良好,但在开发模式下的 Digital Ocean 中,它抛出此错误。请帮我解决一下。

应用程序跟踪:

   app/controllers/products_controller.rb:225:in `destroy'

完整跟踪:

activerecord (4.0.1) lib/active_record/associations/has_many_association.rb:81:in `cached_counter_attribute_name'
activerecord (4.0.1) lib/active_record/associations/has_many_association.rb:104:in `inverse_updates_counter_cache?'
activerecord (4.0.1) lib/active_record/associations/has_many_association.rb:114:in `delete_records'
activerecord (4.0.1) lib/active_record/associations/collection_association.rb:493:in `remove_records'
activerecord (4.0.1) lib/active_record/associations/collection_association.rb:486:in `block in delete_or_destroy'
activerecord (4.0.1) lib/active_record/associations/collection_association.rb:152:in `block in transaction'
activerecord (4.0.1) lib/active_record/connection_adapters/abstract/database_statements.rb:200:in `transaction'
activerecord (4.0.1) lib/active_record/transactions.rb:209:in `transaction'
activerecord (4.0.1) lib/active_record/associations/collection_association.rb:151:in `transaction'
activerecord (4.0.1) lib/active_record/associations/collection_association.rb:486:in `delete_or_destroy'
activerecord (4.0.1) lib/active_record/associations/collection_association.rb:247:in `destroy'
activerecord (4.0.1)  lib/active_record/associations/collection_association.rb:170:in `destroy_all'
activerecord (4.0.1) lib/active_record/associations/has_many_association.rb:26:in `handle_dependency'
 activerecord (4.0.1) lib/active_record/associations/builder/association.rb:97:in `has_many_dependent_for_assets'
 activesupport (4.0.1) lib/active_support/callbacks.rb:397:in `_run__3353912714138952721__destroy__callbacks'
 activesupport (4.0.1) lib/active_support/callbacks.rb:80:in `run_callbacks'
 activerecord (4.0.1) lib/active_record/callbacks.rb:292:in `destroy'
 activerecord (4.0.1) lib/active_record/transactions.rb:265:in `block in destroy'
activerecord (4.0.1) lib/active_record/transactions.rb:326:in `block in with_transaction_returning_status'
activerecord (4.0.1) lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `block in transaction'
activerecord (4.0.1) lib/active_record/connection_adapters/abstract/database_statements.rb:210:in `within_new_transaction'
activerecord (4.0.1) lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `transaction'
activerecord (4.0.1) lib/active_record/transactions.rb:209:in `transaction'
activerecord (4.0.1) lib/active_record/transactions.rb:323:in `with_transaction_returning_status'
activerecord (4.0.1) lib/active_record/transactions.rb:265:in `destroy'
app/controllers/products_controller.rb:225:in `destroy'
    actionpack (4.0.1) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
    actionpack (4.0.1) lib/abstract_controller/base.rb:189:in `process_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:in `block in process_action'
    activesupport (4.0.1) lib/active_support/callbacks.rb:493:in `_run__3348285909198205465__process_action__callbacks'
    activesupport (4.0.1) lib/active_support/callbacks.rb:80:in `run_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:in `block 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:in `process_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:in `process'
 actionpack (4.0.1) lib/abstract_controller/rendering.rb:44:in `process'
actionpack (4.0.1) lib/action_controller/metal.rb:195:in `dispatch'
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:in `dispatch'
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:in `call'
actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:680:in `call'
rack (1.6.4) lib/rack/deflater.rb:35: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.4) lib/rack/etag.rb:24:in `call'
rack (1.6.4) lib/rack/conditionalget.rb:38:in `call'
rack (1.6.4) lib/rack/head.rb:13:in `call'
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.6.4) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.0.1) lib/action_dispatch/middleware/cookies.rb:486:in `call'
activerecord (4.0.1) lib/active_record/query_cache.rb:36:in `call'
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__753779113942060240__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:in `call'
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 `call'
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 `call'
railties (4.0.1) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.1) lib/rails/rack/logger.rb:20:in `block 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:in `call'
actionpack (4.0.1) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.4) lib/rack/runtime.rb:18:in `call'
activesupport (4.0.1) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
actionpack (4.0.1) lib/action_dispatch/middleware/static.rb:64:in `call'
rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
railties (4.0.1) lib/rails/engine.rb:511:in `call'
railties (4.0.1) lib/rails/application.rb:97:in `call'
rack (1.6.4) lib/rack/tempfile_reaper.rb:15:in `call'
rack (1.6.4) lib/rack/lint.rb:49:in `_call'
rack (1.6.4) lib/rack/lint.rb:37:in `call'
rack (1.6.4) lib/rack/showexceptions.rb:24:in `call'
rack (1.6.4) lib/rack/commonlogger.rb:33:in `call'
rack (1.6.4) lib/rack/chunked.rb:54:in `call'
rack (1.6.4) lib/rack/content_length.rb:15:in `call'
unicorn (5.0.0) lib/unicorn/http_server.rb:562:in `process_client'
unicorn (5.0.0) lib/unicorn/http_server.rb:658:in `worker_loop'
unicorn (5.0.0) lib/unicorn/http_server.rb:508:in `spawn_missing_workers'
unicorn (5.0.0) lib/unicorn/http_server.rb:132:in `start'
unicorn (5.0.0) bin/unicorn:126:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.2.1/bin/unicorn:23:in `load'
/usr/local/rvm/gems/ruby-2.2.1/bin/unicorn:23:in `<main>'
/usr/local/rvm/gems/ruby-2.2.1@global/bin/ruby_executable_hooks:15:in `eval'
/usr/local/rvm/gems/ruby-2.2.1@global/bin/ruby_executable_hooks:15:in `<main>'

项目.rb

class Item < ActiveRecord::Base
 belongs_to :user
 belongs_to :order
 belongs_to :product
end

购物车.rb

class Cart < ActiveRecord::Base
  belongs_to :user
  belongs_to :product
end

Assets .rb

class Asset < ActiveRecord::Base
 mount_uploader :asset1, AssetUploader
 mount_uploader :asset2, AssetUploader
 mount_uploader :asset3, AssetUploader
 mount_uploader :asset4, AssetUploader 
end

如果我删除 :dependent => :delete_all,那么这个错误就消失了,但我也需要删除依赖项。

如何完成这个任务?

最佳答案

嘿,问题是您正在使用具有 has_many 关联的依赖销毁选项,这是无法完成的。此选项仅适用于 belongs_to 关联。

就像一个User有很多帖子,一个Post属于User。你想在帖子上设置依赖销毁,因为你说:**我希望这个关联依赖于销毁方法中的用户**,删除用户时,他的所有帖子都应该被删除。

我希望我能停止为你清理东西

关于ruby-on-rails - 调用 destroy 方法会出现错误 - undefined method `name' for nil :NilClass - Rails 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33731967/

相关文章:

ruby-on-rails - 运行配置文件测试时出现 Ruby 段错误

ruby-on-rails - 带有 splat 参数的 Rake 任务

ruby-on-rails - 如何在另一个 Controller 范围内制作 Controller 范围?

javascript - 从 Javascript 类生成多个 HTML 模板时对速度/性能的影响

ruby-on-rails-4 - 使用包含表格标题的 PDFKit 开始一个新页面

ruby-on-rails - 使用 'haml_tag' 测试助手

ruby-on-rails - Rails 3-仅美国时区的时区下拉列表

ruby-on-rails-4 - 使用 hstore 并为用户保存新值

ruby-on-rails - ruby rails : Using user input for calculations on the same page

ruby-on-rails - ruby on rails 中的身份验证器是什么