Вложенные теги содержимого в рельсы - PullRequest
1 голос
/ 06 января 2009

Эй. У меня есть некоторый код от Agile Web Development, который включает HTML-код вокруг вызова метода следующим образом:

  # from tagged_builder.rb, included as a FormBuilder helper
 def self.create_tagged_field(method_name)
    define_method(method_name) do |label, *args|
      @template.content_tag("p",
        @template.content_tag("label" , 
                              label.to_s.humanize.capitalize, 
                              :for => "#{@object_name}_#{label}") 
                               +
        super)
    end
  end

Я хотел бы вложить тег span в метку content_tag, чтобы конечный результат был следующим:

<p><label>Name
        <span class="small">Add your name</span>
    </label>
    <input type="text" name="textfield" id="textfield" />

Мне интересно, как я включаю содержимое диапазона (скажем, такую ​​переменную, как 'warning')

Я пробовал все виды, но безрезультатно. Методы вызывают ок (например, f.text_field: name будет производить

<p><label for="object_name">Name</label></p>

Пробовал это:

  def self.create_tagged_field(method_name)
    define_method(method_name) do |label, warning, *args|
      @template.content_tag("p",
        @template.content_tag("label" , 
                              label.to_s.humanize.capitalize+
                              content_tag("span", warning), 
                              :for => "#{@object_name}_#{label}") 
                               +
        super)
    end
  end

Но не повезло. Кто-нибудь может направить меня в правильном направлении? Спасибо, A

Ответы [ 2 ]

1 голос
/ 07 января 2009

Просто хотел опубликовать окончательное решение, больше для гордости, чем что-либо еще. Нуб ...: 0

  def self.create_tagged_field(method_name)
    define_method(method_name) do |label, *args|
      # accepts the warning hash from text_field helper
      if (args.first.instance_of? Hash) && (args.first.keys.include? :warning)
        warning = args.first[:warning]
      end
        @template.content_tag("label" , label.to_s.humanize+(@template.content_tag("span", warning, :class =>'small')), 
                              :for => "#{@object_name}_#{label}") +                      
         super
    end
  end
1 голос
/ 06 января 2009

Вам нужно позвонить @template.content_tag. Код, который у вас есть, просто вызывает self.content_tag, который, очевидно, ничего не делает.

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