在lib文件夹中使用Ruby Object时未初始化的常量错误

我有一个相当复杂的应用程序,在lib文件夹中使用Ruby Objects(我第一次使用ruby对象)。 我一直得到一个未初始化的常量错误,如下所示: 通过复选框Rails 4添加多个嵌套属性(可能有多个表单)

uninitialized constant ProjectsController::ProjectUpdater 

我的表单尝试做的是根据预制的“模板”任务和里程碑创建启动任务和启动里程碑。 因此,当用户创建项目时,他们已经添加了一些常见任务。 此代码与此前的问题和答案直接相关:

我的控制器:

 class ProjectsController < ApplicationController def new_milestones @project.milestones.build @project.tasks.build @milestones_templates = MilestoneTemplate.where(template_id: @project.template_id) end def update respond_to do |format| **result = ProjectUpdater.perform(@project, update_params) == true**  []}, {:ids => []}, { :milestone_ids => []},:id, :name, :project_id, :milestone_template_id, :project_id, task_attributes: [{:names => []}, {:ids => []}, { :task_ids => []}, :id, :name, :milestone_id, :task_template_id, :project_id, :_destroy]]) end end 

LIB / project_updater.rb

 class ProjectUpdater def self.perform(project, params) milestones = params[:project][:milestones] #Create and save each milestone # You might be able to us nested attributes to save tasks. if project.update_attributes(params[:project]) return true else return project end end end 

我的表格

   



我认为您需要在/lib目录中要求ruby文件,并确保遵循命名约定..就像

  # in lib/foo.rb: class Foo end # in lib/foo/bar.rb: class Foo::Bar end # in you case, in lib/project_updater.rb class ProjectUpdater def self.perform (your_params,,,) # your code end end 

在config / application.rb中:

 config.autoload_paths << %W(#{config.root}/lib) 

这可能会帮助你,或许:)