Настройте имена узлов в Ruby's Builder - PullRequest
3 голосов
/ 14 января 2010

Я создаю инструмент, который генерирует динамический XML. В результате мои модели имеют довольно общие имена:

Project 
  has_many    :Groups

Group
  has_many    :Items
  has_many    :Groups
  belongs_to  :Project

Item
  has_many    :Params
  belongs_to  :Group

Param
  belongs_to  :Project
  belongs_to  :Group
  belongs_to  :Item

Поэтому, когда я собираю xml из контроллера проекта, имя узла проекта является корневым узлом xml. Но я не хочу, чтобы это называлось «проект». Я хочу, чтобы узел был таким, каким является значение @ project.params ['name'].

Проблема, с которой я столкнулся, состоит в том, что структура строителя делает это трудным ... Когда я делаю:

xml.project do
  ~some code
end

... В качестве имени корневого узла всегда будет создаваться «проект». Я не могу найти способ переопределить его, чтобы использовать другое имя. Я надеялся, что что-то вроде следующего будет работать:

xml.send(@project.params.name) {
  ...some code
}

.. но это, очевидно, не работает. Поэтому я пытаюсь найти способ присвоить псевдонимы именам элементов, которые настроены в моей модели params. Любые предложения будут с благодарностью.

1 Ответ

6 голосов
/ 14 января 2010

Вместо выполнения xml.project попробуйте:

xml.tag! @project.params.name do

Это также следует использовать, если в имени элемента есть дефис.

...