如何在初始化程序中包含对Rails 5应用程序嵌套的关注

时间:2017-06-30 17:14:33

标签: ruby-on-rails ruby ruby-on-rails-5 paper-trail-gem

简而言之,我尝试将与版本模型上的属性相对应的表单值(由paper_trail gem提供)传递给调用自定义方法的控制器,该方法执行优化搜索。但是,我收到了NoMethodError。当在初始化程序本身内部声明时,该方法按预期工作,但在其他地方不能。有关如何解决的任何想法?

代码如下 - 我省略了似乎不相关的部分:

应用程序/控制器/工人/ csr_activities_controller.rb

class Worker::CustomerSupportActivitiesController < Worker::BaseController  
  def index
    PaperTrail::Version.search_versions(resource_params)
  end

  ...

  private 
    def resource_params
      params.fetch(:query).permit(:whodunnit, :event, :item_type, :term, :start_date, :end_date)
    end
end

应用程序/控制器/关切/ search_versions.rb

module SearchVersions
  extend ActiveSupport::Concern

  def search_versions(params)
    ...
  end 
end 

配置/初始化/ paper_trail.rb

PaperTrail.config.track_associations = false
PaperTrail.config.version_limit = 100

require Rails.root.join('./app/controllers/concerns/search_versions.rb')

module PaperTrail
  class Version < ActiveRecord::Base    
    include SearchVersions
  end
end

终端

...
[51e4ee33-6308-4861-bf3a-e1c51ecdfac0] NoMethodError (undefined method `search_versions' for #<Class:0x007f94e5ed2a70>):
...

1 个答案:

答案 0 :(得分:1)

经典 - 在发布后不久发现它。可以通过更改以下内容来解决此问题:

extend SearchVersions内{p> config/initializers/paper_trail.rbif(edit !== "") alert("text"); // Ok with value else if(edit === "") alert("empty"); // Ok with empty value, AND cancel else if(edit === null) alert("null"); // ...?

基本上,我需要使用extend,因为我在类版本上调用了已由Module SearchVersions扩展的方法。

编辑:根据engineermnky的评论更改术语以防止混淆。