繁体   English   中英

如何在Rails 5应用程序中通过嵌套将关注点包含在Initializer中

[英]How to include Concern inside Initializer with nesting on Rails 5 app

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

代码在下面-我省略了看起来不相关的部分:

app / controllers / worker / 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

app / controllers / concerns / search_versions.rb

module SearchVersions
  extend ActiveSupport::Concern

  def search_versions(params)
    ...
  end 
end 

config / initializers / 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>):
...

经典-在此处发布后不久就解决了。 可以通过以下方法解决此问题:

include SearchVersions以在config/initializers/paper_trail.rb extend SearchVersions config/initializers/paper_trail.rb

从本质上讲,我需要使用扩展,因为我要在模块版本由模块SearchVersions扩展的类版本上调用该方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM