ruby - 未定义方法“发票”Ruby on Rails 的问题
问题描述
我刚开始使用 Rails,我被卡住了。我不明白为什么会收到此错误:
这是课程InnkeeperBillingInformation
:
class InnkeeperBillingInformation < ApplicationRecord
belongs_to :user
validates :first_name, :last_name, :company_name,
:address, :municipality, :province, :country,
:zip_code, :tax_code, :vat, :email, :phone_number,
presence: true
after_create :generate_invoice
private
def generate_invoice
subscription = user.innkeeper_subscription
subscription.invoices.create(number: generate_invoice_name(user), amount: subscription.type.price)
end
def generate_invoice_name(user)
month = Time.now.strftime("%B")
"Abbonamento: #{user.subscription_type} - #{month} #{Time.now.year}"
end
end
这是控制器:
def create
@innkeeper_billing_information = InnkeeperBillingInformation.new innkeeper_billing_information_params
if @innkeeper_billing_information.save
redirect_to dashboard_path, notice: "Dati di fatturazione salvati con successo!"
else
redirect_to({ action: :index }, notice: "Non è stato possibile completare la richiesta.")
end
end
类 NullInnkeeper 订阅:
class NullInnkeeperSubscription
def id
nil
end
def active?
false
end
def empty_array
[]
end
def type_name
"Nessuno"
end
%w(eateries menu_sections menus dishes invitations innkeeper_subscription_managers).each do |method|
alias_method method, "empty_array"
end
end
类用户.rb:
def innkeeper_subscription
innkeeper_subscriptions.detect(&:active?) || NullInnkeeperSubscription.new
end
这是堆栈跟踪:
NoMethodError - undefined method `invoices' for #<NullInnkeeperSubscription:0x00007fc42ebf3930>:
app/models/innkeeper_billing_information.rb:15:in `generate_invoice'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:382:in `block in make_lambda'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:207:in `block in halting_and_conditional'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:456:in `block in call'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:456:in `call'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:101:in `__run_callbacks__'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:750:in `_run_create_callbacks'
activerecord (5.0.7.2) lib/active_record/callbacks.rb:302:in `_create_record'
activerecord (5.0.7.2) lib/active_record/timestamp.rb:68:in `_create_record'
activerecord (5.0.7.2) lib/active_record/persistence.rb:548:in `create_or_update'
activerecord (5.0.7.2) lib/active_record/callbacks.rb:298:in `block in create_or_update'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:126:in `call'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:455:in `call'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:101:in `__run_callbacks__'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:750:in `_run_save_callbacks'
activerecord (5.0.7.2) lib/active_record/callbacks.rb:298:in `create_or_update'
activerecord (5.0.7.2) lib/active_record/persistence.rb:129:in `save'
activerecord (5.0.7.2) lib/active_record/validations.rb:44:in `save'
activerecord (5.0.7.2) lib/active_record/attribute_methods/dirty.rb:22:in `save'
activerecord (5.0.7.2) lib/active_record/transactions.rb:319:in `block (2 levels) in save'
activerecord (5.0.7.2) lib/active_record/transactions.rb:395:in `block in with_transaction_returning_status'
activerecord (5.0.7.2) lib/active_record/connection_adapters/abstract/database_statements.rb:232:in `block in transaction'
activerecord (5.0.7.2) lib/active_record/connection_adapters/abstract/transaction.rb:189:in `within_new_transaction'
activerecord (5.0.7.2) lib/active_record/connection_adapters/abstract/database_statements.rb:232:in `transaction'
activerecord (5.0.7.2) lib/active_record/transactions.rb:211:in `transaction'
activerecord (5.0.7.2) lib/active_record/transactions.rb:392:in `with_transaction_returning_status'
activerecord (5.0.7.2) lib/active_record/transactions.rb:319:in `block in save'
activerecord (5.0.7.2) lib/active_record/transactions.rb:334:in `rollback_active_record_state!'
activerecord (5.0.7.2) lib/active_record/transactions.rb:318:in `save'
activerecord (5.0.7.2) lib/active_record/suppressor.rb:41:in `save'
bullet (5.5.0) lib/bullet/active_record5.rb:5:in `save'
app/controllers/dashboard/innkeeper_billing_informations_controller.rb:16:in `create'
actionpack (5.0.7.2) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
actionpack (5.0.7.2) lib/abstract_controller/base.rb:188:in `process_action'
actionpack (5.0.7.2) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (5.0.7.2) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:126:in `call'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:455:in `call'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:448:in `block (2 levels) in around'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:286:in `block (2 levels) in halting'
() var/lib/gems/2.5.0/bundler/gems/route_translator-9d3350d9574c/lib/route_translator/extensions/action_controller.rb:27:in `set_locale_from_url'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:382:in `block in make_lambda'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:285:in `block in halting'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:447:in `block in around'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:455:in `call'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:101:in `__run_callbacks__'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.7.2) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (5.0.7.2) lib/action_controller/metal/rescue.rb:20:in `process_action'
actionpack (5.0.7.2) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (5.0.7.2) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (5.0.7.2) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (5.0.7.2) lib/active_support/notifications.rb:164:in `instrument'
actionpack (5.0.7.2) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (5.0.7.2) lib/action_controller/metal/params_wrapper.rb:248:in `process_action'
searchkick (2.3.0) lib/searchkick/logging.rb:209:in `process_action'
activerecord (5.0.7.2) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (5.0.7.2) lib/abstract_controller/base.rb:126:in `process'
actionview (5.0.7.2) lib/action_view/rendering.rb:30:in `process'
actionpack (5.0.7.2) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (5.0.7.2) lib/action_controller/metal.rb:262:in `dispatch'
actionpack (5.0.7.2) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (5.0.7.2) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (5.0.7.2) lib/action_dispatch/journey/router.rb:39:in `block in serve'
actionpack (5.0.7.2) lib/action_dispatch/journey/router.rb:26:in `serve'
actionpack (5.0.7.2) lib/action_dispatch/routing/route_set.rb:727:in `call'
omniauth (1.4.1) lib/omniauth/strategy.rb:186:in `call!'
omniauth (1.4.1) lib/omniauth/strategy.rb:164:in `call'
bullet (5.5.0) lib/bullet/rack.rb:12:in `call'
warden (1.2.9) lib/warden/manager.rb:36:in `block in call'
warden (1.2.9) lib/warden/manager.rb:34:in `call'
rack (2.2.3) lib/rack/etag.rb:27:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (5.0.7.2) lib/action_dispatch/middleware/cookies.rb:613:in `call'
activerecord (5.0.7.2) lib/active_record/migration.rb:553:in `call'
actionpack (5.0.7.2) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:97:in `__run_callbacks__'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
activesupport (5.0.7.2) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.7.2) lib/action_dispatch/middleware/callbacks.rb:36:in `call'
actionpack (5.0.7.2) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.7.2) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
() var/lib/gems/2.5.0/bundler/gems/better_errors-707ffcf284d8/lib/better_errors/middleware.rb:84:in `protected_app_call'
() var/lib/gems/2.5.0/bundler/gems/better_errors-707ffcf284d8/lib/better_errors/middleware.rb:79:in `better_errors_call'
() var/lib/gems/2.5.0/bundler/gems/better_errors-707ffcf284d8/lib/better_errors/middleware.rb:57:in `call'
actionpack (5.0.7.2) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
web-console (3.4.0) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.4.0) lib/web_console/middleware.rb:28:in `block in call'
web-console (3.4.0) lib/web_console/middleware.rb:18:in `call'
actionpack (5.0.7.2) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.0.7.2) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.0.7.2) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.0.7.2) lib/active_support/tagged_logging.rb:69:in `block in tagged'
activesupport (5.0.7.2) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.0.7.2) lib/active_support/tagged_logging.rb:69:in `tagged'
railties (5.0.7.2) lib/rails/rack/logger.rb:24:in `call'
sprockets-rails (3.2.2) lib/sprockets/rails/quiet_assets.rb:13:in `call'
request_store (1.3.2) lib/request_store/middleware.rb:9:in `call'
actionpack (5.0.7.2) lib/action_dispatch/middleware/request_id.rb:24:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
rack (2.2.3) lib/rack/runtime.rb:22:in `call'
activesupport (5.0.7.2) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
actionpack (5.0.7.2) lib/action_dispatch/middleware/executor.rb:12:in `call'
rack-livereload (0.3.16) lib/rack/livereload.rb:23:in `_call'
rack-livereload (0.3.16) lib/rack/livereload.rb:14:in `call'
actionpack (5.0.7.2) lib/action_dispatch/middleware/static.rb:136:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
rack-cors (0.4.1) lib/rack/cors.rb:81:in `call'
railties (5.0.7.2) lib/rails/engine.rb:522:in `call'
puma (3.7.0) lib/puma/configuration.rb:226:in `call'
puma (3.7.0) lib/puma/server.rb:578:in `handle_request'
puma (3.7.0) lib/puma/server.rb:415:in `process_client'
puma (3.7.0) lib/puma/server.rb:275:in `block in run'
puma (3.7.0) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
方法在那里,但我不明白为什么它会给我这个错误
解决方案
推荐阅读
- java - Android Google Maps - 标记颜色编码仅适用于最后的 Firestore 结果
- eclipse - Eclipse 忘记“启动前保存所需的脏编辑器”设置
- r - Bigram Tokenization 和 Unigram Tokenizer
- sql - BigQuery标准SQL中基于其他列的列填空
- python - 带有 wget 和外部 api 的 Python 脚本
- html - 如何防止 div 中断到下一行
- intellij-idea - Intellij New Json Scratch 文件
- python - `my_instance = MyClass(a, b).my_method(c)` 是可接受的(Pythonic)模式吗?
- java - 不断收到 java.awt.AWTError: BoxLayout can't be shared
- java - Thread Busy apache tomcat 解压数据