Использование помощника image_path в пользовательском файле yml.erb в каталоге config, написанном через пользовательский инициализатор - PullRequest
4 голосов
/ 11 декабря 2011

Я создал файл yml.erb, который будет использоваться для настройки некоторых частей моего приложения.Я хотел бы предварительно загрузить его с инициализатором (мне не нужно менять его во время работы приложения), самая большая проблема заключается в том, что этот файл yml содержит ссылку на изображения, которые находятся в каталоге app / assets / images.Я хотел бы использовать помощник image_path внутри моего файла yml.erb, но у меня возникли проблемы (я не знаю, что мне следует включать и куда его включать: если в файле yml.erb или в файле, который анализируетфайл yml.erb).

Что у меня есть на данный момент

desktop_icons.rb (внутри config / initializer)

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

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 23 июля 2012

Если ERB нужно анализировать только из внутренних представлений, вы можете сделать что-то вроде этого:

Контроллер

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

View

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

Таким образом, вы можете контролировать, какие атрибуты действительно анализируются. Кроме того, все помощники, доступные в представлении, доступны в yaml из-за (binding).

1 голос
/ 11 декабря 2011

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 self равен Rails.application

0 голосов
/ 12 декабря 2011

Похоже, рельсы "недостаточно инициализированы", как заявили ffoeg и clyfe.Я переместил скрипт в другую часть моего кода, где rails более инициализированы, и теперь он работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...