覆盖rails中的默认脚手架视图不起作用

时间:2014-08-10 01:10:38

标签: ruby-on-rails ruby ruby-on-rails-4

我想覆盖我的rails 4 app的默认支架视图。我已经从railties复制了所有erb脚手架文件,并将它们放在我的app / lib / templates / erb / scaffold下的以下文件夹中。

我修改了new.erb.html文件,以便判断是否使用了lib / templates erb文件来生成视图而不是默认的railties文件。

运行命令后:

rails g scaffold Customer code:string name:string

并重新加载新的客户页面,它不会选择我的自定义脚手架文件来生成新的客户视图。

我是否需要在应用程序中设置其他内容以告诉它查看脚手架模板文件的lib / templates文件夹?

  • Rails版本是:Rails 4.1.4
  • 操作系统版本为:Ubuntu 14.04 LTS
  • Ruby版本是:ruby 2.1.2p95(2014-05-08修订版45877)[x86_64-linux]

干杯, 利。

3 个答案:

答案 0 :(得分:3)

除非我销毁 ed或生成 d我的脚手架实体多少次,否则我的更改永远不会显示,因此我遇到了同样的问题。为了解决这个问题,我将以下默认值添加到我的config/application.rb文件中(请参阅Ruby on Rails指南中的Customizing Your Workflow):

...
class Application < Rails::Application
...
  config.generators do |g|
    g.orm             :active_record
    g.template_engine :erb
    g.test_framework  :test_unit, fixture: true
  end
end
...

答案 1 :(得分:1)

我会链接到你的this帖子,里面有答案。 但简而言之,他们所说的是: 您需要在声明引擎的文件中添加此代码。

class Engine < Rails::Engine

  config.app_generators do |g|
    g.templates.unshift File::expand_path('../templates', __FILE__)
  end

end

它还链接到您似乎要做的事情的示例。享受!

答案 2 :(得分:0)

我找到了一个“解决方案”但是我不完全确定为什么重新运行scaffold命令不会产生相同的结果。相反,我运行:rails destroy scaffold客户然后重新运行:rails g scaffold客户代码:字符串名称:字符串,它工作。最大的问题是,如果我进行额外的视图模板更改,我将需要再次执行相同操作,或者将重新运行scaffold命令工作。时间会告诉......