如何使用after_create方法

时间:2015-07-14 17:40:25

标签: ruby-on-rails-4

我有两个模型Testimonial and Review。当我使用create_after方法创建推荐书时,我想创建一个包含相同推荐数据的评论。

class Testimonial < ...
  after_create :create_review

  def create_review
    Review.create(name: self.name, email: self.email,
                  country: self.country, r_status: "No Publicar",
                  testimony: self.testimony)
  end
end

我得到的错误是:

uninitialized constant 

以下是完整的跟踪:     供应商/扩展/推荐/ app / models / refinery / testimonials / testimonial.rb:17:在make_lambda的create_review' activesupport (4.2.1) lib/active_support/callbacks.rb:432:in块中&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:228:在halting_and_conditional&#39;中的call' activesupport (4.2.1) lib/active_support/callbacks.rb:228:in块中     activesupport(4.2.1)lib / active_support / callbacks.rb:506:in call' activesupport (4.2.1) lib/active_support/callbacks.rb:506:in阻止呼叫&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:506:in each' activesupport (4.2.1) lib/active_support/callbacks.rb:506:in call&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:92:in _run_callbacks' activesupport (4.2.1) lib/active_support/callbacks.rb:776:in _ run_create_callbacks&#39;     activerecord(4.2.1)lib / active_record / callbacks.rb:306:in _create_record' activerecord (4.2.1) lib/active_record/timestamp.rb:57:in _ create_record&#39;     activerecord(4.2.1)lib / active_record / persistence.rb:502:在create_or_update&#39;中的create_or_update' activerecord (4.2.1) lib/active_record/callbacks.rb:302:in块中     activesupport(4.2.1)lib / active_support / callbacks.rb:117:在call' activesupport (4.2.1) lib/active_support/callbacks.rb:117:in来电&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:555:in block (2 levels) in compile' activesupport (4.2.1) lib/active_support/callbacks.rb:505:in call&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:505:在call' activesupport (4.2.1) lib/active_support/callbacks.rb:92:in _ run_callbacks&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:776:在_run_save_callbacks' activerecord (4.2.1) lib/active_record/callbacks.rb:302:in create_or_update&#39;     activerecord(4.2.1)lib / active_record / persistence.rb:120:在save' activerecord (4.2.1) lib/active_record/validations.rb:37:in中保存&#39;     activerecord(4.2.1)lib / active_record / attribute_methods / dirty.rb:21:在save' activerecord (4.2.1) lib/active_record/transactions.rb:286:in块(2级)中保存&#39;     activerecord(4.2.1)lib / active_record / transactions.rb:347:在事务中的block in with_transaction_returning_status' activerecord (4.2.1) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in块中&#39;     activerecord(4.2.1)lib / active_record / connection_adapters / abstract / transaction.rb:188:in within_new_transaction' activerecord (4.2.1) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in transaction&#39;     activerecord(4.2.1)lib / active_record / transactions.rb:220:在transaction' activerecord (4.2.1) lib/active_record/transactions.rb:344:in with_transaction_returning_status&#39;     activerecord(4.2.1)lib / active_record / transactions.rb:286:in block in save' activerecord (4.2.1) lib/active_record/transactions.rb:301:in rollback_active_record_state!&#39;     activerecord(4.2.1)lib / active_record / transactions.rb:285:in save' vendor/extensions/testimonials/app/controllers/refinery/testimonials/testimonials_controller.rb:23:in create&#39;     actionpack(4.2.1)lib / action_controller / metal / implicit_render.rb:4:在send_action' actionpack (4.2.1) lib/abstract_controller/base.rb:198:in process_action&#39;     actionpack(4.2.1)lib / action_controller / metal / rendering.rb:10:在process_action&#39;中的process_action' actionpack (4.2.1) lib/abstract_controller/callbacks.rb:20:in块中     activesupport(4.2.1)lib / active_support / callbacks.rb:117:在call' activesupport (4.2.1) lib/active_support/callbacks.rb:117:in来电&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:555:in block (2 levels) in compile' activesupport (4.2.1) lib/active_support/callbacks.rb:505:in call&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:505:在call' activesupport (4.2.1) lib/active_support/callbacks.rb:92:in _ run_callbacks&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:776:在_run_process_action_callbacks' activesupport (4.2.1) lib/active_support/callbacks.rb:81:in run_callbacks&#39;     actionpack(4.2.1)lib / abstract_controller / callbacks.rb:19:在process_action' actionpack (4.2.1) lib/action_controller/metal/rescue.rb:29:in process_action&#39;     actionpack(4.2.1)lib / action_controller / metal / instrumentation.rb:32:在block in process_action' activesupport (4.2.1) lib/active_support/notifications.rb:164:in块中的仪器&#39;     activesupport(4.2.1)lib / active_support / notifications / instrumenter.rb:20:in instrument' activesupport (4.2.1) lib/active_support/notifications.rb:164:in instrument&#39;     actionpack(4.2.1)lib / action_controller / metal / instrumentation.rb:30:在process_action' actionpack (4.2.1) lib/action_controller/metal/params_wrapper.rb:250:in process_action&#39;     activerecord(4.2.1)lib / active_record / railties / controller_runtime.rb:18:in process_action' actionpack (4.2.1) lib/abstract_controller/base.rb:137:in进程&#39;     actionview(4.2.1)lib / action_view / rendering.rb:30:在process' actionpack (4.2.1) lib/action_controller/metal.rb:196:in发送&#39;     actionpack(4.2.1)lib / action_controller / metal / rack_delegation.rb:13:dispatch' actionpack (4.2.1) lib/action_controller/metal.rb:237:in阻止行动&#39;     actionpack(4.2.1)lib / action_dispatch / routing / route_set.rb:74:in call' actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:74:in dispatch&#39;     actionpack(4.2.1)lib / action_dispatch / routing / route_set.rb:43:在serve' actionpack (4.2.1) lib/action_dispatch/journey/router.rb:43:in块中的服务&#39;     actionpack(4.2.1)lib / action_dispatch / journey / router.rb:30:在each' actionpack (4.2.1) lib/action_dispatch/journey/router.rb:30:in发送&#39;     actionpack(4.2.1)lib / action_dispatch / routing / route_set.rb:819:call' railties (4.2.1) lib/rails/engine.rb:518:in来电&#39;     railties(4.2.1)lib / rails / railtie.rb:194:public_send' railties (4.2.1) lib/rails/railtie.rb:194:in method_missing&#39;     actionpack(4.2.1)lib / action_dispatch / routing / mapper.rb:51:in serve' actionpack (4.2.1) lib/action_dispatch/journey/router.rb:43:in block in serve&#39;     actionpack(4.2.1)lib / action_dispatch / journey / router.rb:30:在each' actionpack (4.2.1) lib/action_dispatch/journey/router.rb:30:in发送&#39;     actionpack(4.2.1)lib / action_dispatch / routing / route_set.rb:819:call' dragonfly (1.0.10) lib/dragonfly/middleware.rb:14:in来电&#39;     dragonfly(1.0.10)lib / dragonfly / middleware.rb:14:in call' warden (1.2.3) lib/warden/manager.rb:35:in阻止通话&#39;     warden(1.2.3)lib / warden / manager.rb:34:in catch' warden (1.2.3) lib/warden/manager.rb:34:in来电&#39;     rack(1.6.4)lib / rack / etag.rb:24:in call' rack (1.6.4) lib/rack/conditionalget.rb:38:in来电&#39;     rack(1.6.4)lib / rack / head.rb:13:in call' actionpack (4.2.1) lib/action_dispatch/middleware/params_parser.rb:27:in call&#39;     actionpack(4.2.1)lib / action_dispatch / middleware / flash.rb:260:call' rack (1.6.4) lib/rack/session/abstract/id.rb:225:in上下文&#39;     rack(1.6.4)lib / rack / session / abstract / id.rb:220:in call' actionpack (4.2.1) lib/action_dispatch/middleware/cookies.rb:560:in call&#39;     activerecord(4.2.1)lib / active_record / query_cache.rb:36:in call' activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:649:in call&#39;     activerecord(4.2.1)lib / active_record / migration.rb:378:在call' actionpack (4.2.1) lib/action_dispatch/middleware/callbacks.rb:29:in阻止呼叫&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:88:in call' activesupport (4.2.1) lib/active_support/callbacks.rb:88:in _ run_callbacks&#39;     activesupport(4.2.1)lib / active_support / callbacks.rb:776:在_run_call_callbacks' activesupport (4.2.1) lib/active_support/callbacks.rb:81:in run_callbacks&#39;     actionpack(4.2.1)lib / action_dispatch / middleware / callbacks.rb:27:in call' actionpack (4.2.1) lib/action_dispatch/middleware/reloader.rb:73:in call&#39;     actionpack(4.2.1)lib / action_dispatch / middleware / remote_ip.rb:78:in call' actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in call&#39;     web-console(2.1.3)lib / web_console / middleware.rb:37:in call' actionpack (4.2.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in call&#39;     railties(4.2.1)lib / rails / rack / logger.rb:38:in call_app' railties (4.2.1) lib/rails/rack/logger.rb:20:in阻止电话&#39;     activesupport(4.2.1)lib / active_support / tagged_logging.rb:68:in block in tagged' activesupport (4.2.1) lib/active_support/tagged_logging.rb:26:in已标记&#39;     activesupport(4.2.1)lib / active_support / tagged_logging.rb:68:in tagged' railties (4.2.1) lib/rails/rack/logger.rb:20:in call&#39;     quiet_assets(1.1.0)lib / quiet_assets.rb:27:in call_with_quiet_assets' actionpack (4.2.1) lib/action_dispatch/middleware/request_id.rb:21:in来电&#39;     rack(1.6.4)lib / rack / methodoverride.rb:22:in call' rack (1.6.4) lib/rack/runtime.rb:18:in call&#39;     activesupport(4.2.1)lib / active_support / cache / strategy / local_cache_middleware.rb:28:in call' dragonfly (1.0.10) lib/dragonfly/cookie_monster.rb:9:in call&#39;     rack(1.6.4)lib / rack / lock.rb:17:in call' actionpack (4.2.1) lib/action_dispatch/middleware/static.rb:113:in call&#39;     rack(1.6.4)lib / rack / sendfile.rb:113:在call' railties (4.2.1) lib/rails/engine.rb:518:in来电&#39;     railties(4.2.1)lib / rails / application.rb:164:in call' rack (1.6.4) lib/rack/lock.rb:17:in call&#39;     rack(1.6.4)lib / rack / content_length.rb:15:in call' rack (1.6.4) lib/rack/handler/webrick.rb:88:in service&#39;     /Users/evanx/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:138:in service' /Users/evanx/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:94:in运行&#39;     /Users/evanx/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/server.rb:295:in在start_thread中阻止&#39;

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

Review模型属于Testimonial模型中的不同模块(命名空间)。 未初始化的常量错误即将到来,因为您正在尝试从定义它的命名空间外部访问类。您需要使用 命名空间解析运算符 (::)来访问在不同命名空间中定义的类。

您需要使用它的模块引用Review类,例如 Refinery :: Reviews :: Review ,假设它被定义为:

vtimestamp

答案 1 :(得分:0)

@evanx这是因为您必须调用包含模块的类。 所以在这里我想Refinery::Reviews::Review.create....应该做的伎俩! 希望能帮助到你 ! :)