4

アプリケーションの一部を構成するために使用される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

なにか提案を?

4

3 に答える 3

2

ERBを内部ビューからのみ解析する必要がある場合は、次のように実行できます。

コントローラ

@questions = YAML.load_file("#{Rails.root}/config/faq.yml.erb")

意見

<%= ERB.new(@questions[2]["answer"]).result(binding).html_safe %>

このようにして、実際に解析される属性を制御できます。また、ビューで利用可能なすべてのヘルパーは、のためにyamlで利用できます(binding)

于 2012-07-23T09:56:19.247 に答える
1

Rails.application.routes.url_helpersは、url_helpersを含むモジュールであり、使用する場所に含めることができます。これをバインディングを介してERBに渡すことができます

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

于 2011-12-11T02:24:28.387 に答える
0

ffoegとclyfeが述べているように、railsは「十分に初期化されていない」ようです。スクリプトをコードの別の部分に移動しました。ここでは、railsがより初期化され、正常に機能しています。

于 2011-12-12T03:38:58.147 に答える