从挂载的 Rails 引擎 cd 进入一个目录

cd into a directory from a mounted Rails Engine

我有一个 Rails 应用程序,在引擎中安装了 Rails engine. I have created a Rails generator。从 Rails 应用程序调用生成器。生成器的目的是从 Rails 引擎复制一组视图,并将它们添加到 Rails 应用程序的视图文件夹中。

Rails 生成器工作正常,但我需要使用 Ruby class Dir glob method 重构它。

这是我的 views_generator.rb 文件,它工作正常:

class Speaker::ViewsGenerator < Rails::Generators::Base
  source_root File.expand_path('../templates', __FILE__)

  def generate_participant_views
    copy_file "#{copy_path}/participants/_form.html.erb", "#{paste_path}/participants/_form.html.erb"
    copy_file "#{copy_path}/participants/edit.html.erb", "#{paste_path}/participants/edit.html.erb"
    copy_file "#{copy_path}/participants/index.html.erb", "#{paste_path}/participants/index.html.erb"
    copy_file "#{copy_path}/participants/new.html.erb", "#{paste_path}/participants/new.html.erb"
    copy_file "#{copy_path}/participants/show.html.erb", "#{paste_path}/participants/show.html.erb"
  end

  def generate_room_views
    copy_file "#{copy_path}/rooms/_form.html.erb", "#{paste_path}/rooms/_form.html.erb"
    copy_file "#{copy_path}/rooms/edit.html.erb", "#{paste_path}/rooms/edit.html.erb"
    copy_file "#{copy_path}/rooms/index.html.erb", "#{paste_path}/rooms/index.html.erb"
    copy_file "#{copy_path}/rooms/new.html.erb", "#{paste_path}/rooms/new.html.erb"
    copy_file "#{copy_path}/rooms/show.html.erb", "#{paste_path}/rooms/show.html.erb"
  end

  private

  def copy_path
    '../../../../../app/views/speaker'
  end

  def paste_path
    'app/views/speaker'
  end

end

我不想写出每个文件,而是想使用 glob 方法遍历给定文件夹中的所有文件。但为了做到这一点,我首先需要进入 Rails 引擎的 views 文件夹。

所以这是我的问题。我如何从我的 Rails 应用程序 进入安装的 Rails 引擎 内的目录?

我想用这样的方法替换上面的 generate_participant_views 方法:

def generate_participant_views
    Dir.chdir "#{copy_path}/participants"
    all_files = Dir.blob('*')
    all_files.each do |file|
      copy_file file, paste_path + file
    end
end

显然该方法的第一行不起作用,因为它是从 Rails app 内部调用的,而不是引擎。

那么,如何从应用程序的有利位置将目录更改为安装的 Rails 引擎内的文件夹?

谢谢!

我最终采用了不同的方法,通过复制和粘贴整个目录来解决问题。这解决了必须通过 Rails 应用程序手动访问引擎文件的问题。

更新后的方法如下:

  def generate_participant_views
    directory "#{copy_path}/participants", "#{paste_path}/participants"
  end

  def generate_room_views
    directory "#{copy_path}/rooms", "#{paste_path}/rooms"
  end