Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 注入gem';父应用程序模型中筛选器之前的_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 注入gem';父应用程序模型中筛选器之前的

Ruby on rails 注入gem';父应用程序模型中筛选器之前的,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图看看是否有可能在父应用程序模型中注入或执行gem的before过滤器。 例子: Gem的Gem/app/controllers/test/application\u controller.rb: module Test class ApplicationController < ActionController::Base before_update :foo def foo puts 'test' end end end class

我试图看看是否有可能在父应用程序模型中注入或执行gem的before过滤器。 例子: Gem的
Gem/app/controllers/test/application\u controller.rb

module Test
  class ApplicationController < ActionController::Base
    before_update :foo

    def foo
      puts 'test'
    end
  end
end
class Business < ApplicationRecord
 # should call foo before creating the record 
 # and execute the puts statement
end
当应用程序执行
Business.create(params)
时,
Business
模型应该从gem调用方法
foo
,并执行
put语句。目前,我无法进行此调用,b/c
foo
create
方法之前没有执行。因此,我正在寻找一种方法来尝试和测试这一点。谢谢

编辑2: 这里的用例是:父应用程序中的一些模型包含列
创建的列和
更新的列。我们希望将这些列更新为对特定模型执行操作的用户UID。我知道我可以在家长应用程序中更新或创建之前执行
,但我们希望将这些操作放在gem中,以便我们的多个应用程序可以使用它。我们正在使用的gem是我们编写的一个通用gem,它集成在我们的所有应用程序中。另外,我知道有很多优点,比如审计跟踪,但我们希望它更简单。

除了在具有多个模型的gem中使用它之外,这里的代码片段的想法基本相同。我希望这能让事情变得更清楚。谢谢

我决定用一个新的gem和一个干净的rails应用程序来测试它

Gem

Gemfile

源代码'https://rubygems.org'
宝石
gem‘activerecord’
lib/application_record.rb

class ApplicationRecord
Rails应用程序

app/models/business.rb

class Business < ApplicationRecord
end
类业务

在rails控制台中,我调用
Business.create
,我得到的第一个输出是
test

欢迎使用SO!如果您发布上面显示的代码的结果,这将非常有用。
:foo
是否在
业务上被调用。创建
?你有错误吗?您是否正在使用任何调试(例如调用
binding.pry
:foo
)我在@chiperifc进行了更新。感谢you@MavinaLim您是否覆盖
Business
类中的默认
create
方法?我想这只是说明性的,但会产生误导。使用名为
create
的方法时要小心-这是默认的活动记录方法-我会尽量避免。如果您必须使用
create
方法,请务必对其调用“super”。我强烈建议您重命名该方法,除非您有非常非常好的理由将其命名为
create
@AlexeySchepin@BKSpurgeon,我表示歉意,这是代码片段的一个糟糕示例。那里不应该有
create
方法。令人惊讶的是,我将测试并报告。非常感谢@AlexeySchepin。旁注,是不是被打破了?有时显示,有时不显示。@BKSpurgeon@alexey schepin很抱歉,我在片段中犯了一个错误
foo
位于
controller/application\u controller.rb
请再次查看代码段。抱歉。嘿@MavinaLim,控制器中没有保存前的
回调。您可以在执行操作之前使用
或该列表中的其他回调,我想可能存在一些概念上的误解。你能解释一下你到底想要实现什么吗?找到一个合适的解决方案是很容易的。@AlexeySchepin我已经用一个用例更新了edit。再次感谢您的帮助!