我构建了一个yml.erb文件,该文件将用于配置我的应用程序的某些部分。 我想用初始化程序预加载它(我不要求它在应用程序运行期间更改),最大的问题是这个yml文件包含指向app / assets / images目录中的图像的链接。我想在我的yml.erb文件中使用image_path帮助器,但是我遇到了麻烦(我不知道应该包含什么以及我应该在哪里包含它:如果在yml.erb文件中或在解析的文件中yml.erb文件)。
目前我所拥有的
desktop_icons.rb (在config / initializers中)
require 'yaml'
require 'rails'
include ActionView::Helpers::AssetTagHelper
module ManageFedertrekOrg
class Application < Rails::Application
def desktop_icons
@icons ||= YAML.load(ERB.new(File.read("#{Rails.root}/config/icons.yml.erb")).result)
end
end
end
icons.yml.erb (内部配置)
-
image: <%= image_path "rails" %>
title: Test this title
home_controller.rb (内部控制器)
class HomeController < ApplicationController
skip_filter :authenticate_user!
def index
@user_is_signed_in = user_signed_in?
respond_to do |format|
format.html { render :layout => false } # index.html.erb
end
end
def icons
result =
{
icons: MyApp::Application.desktop_icons,
success: true,
total: MyApp::Application.desktop_icons.count
}
respond_to do |format|
format.json { render json: result }
end
end
end
有什么建议吗?
答案 0 :(得分:2)
如果只需要从内部视图中解析ERB,您可以执行以下操作:
<强>控制器强>
@questions = YAML.load_file("#{Rails.root}/config/faq.yml.erb")
查看强>
<%= ERB.new(@questions[2]["answer"]).result(binding).html_safe %>
通过这种方式,您可以控制实际解析的属性。此外,由于(binding)
。
答案 1 :(得分:1)
Rails.application.routes.url_helpers
是一个包含url_helpers的模块,您可以将其包含在要使用它们的位置。您可以通过binding
class Application < Rails::Application
def desktop_icons
@icons ||= YAML.load(
ERB.new(File.read("#{Rails.root}/config/icons.yml.erb")).result(binding)
)
end
end
然后在yml中
<% extend routes.url_helpers %>
-
image: <%= image_path "rails" %>
title: Test this title
因为在erb评估时,自我为Rails.application
答案 2 :(得分:0)
看起来像'ffoeg和clyfe所说的那样,导轨“没有初始化”。我将脚本移动到我的代码的另一部分,其中rails更加初始化,现在它运行良好。