Как использовать Ruby on Rails Mustache для предварительного просмотра в HTML из ActiveModel - PullRequest
1 голос
/ 12 марта 2011

Мы используем Усы шаблоны, и я хотел бы сделать предварительный просмотр в нашем веб-приложении RoR, который объединяет шаблон и некоторые данные, которые мы сохранили в нашей базе данных, но он не работает, как я ожидали после некоторого поиска в интернете (включая SO!) я не нашел примеров, включающих активную модель.

Как передать записи ActiveModel в Усы для слияния с шаблоном?

Настройка:

Схема

create_table "templates", :force => true do |t|
  t.string   "kind"
  t.text     "data"
  t.integer  "data_count"
end
create_table "bars", :force => true do |t|
  t.string   "guid"
  t.string   "name"
  t.string   "summary"
end

В моделях нет ничего особенного.Оба подкласса из ActiveRecord :: Base

class Bars < ActiveRecord::Base
end
class Templates < ActiveRecord::Base
end

Контроллер

class TemplateController < ApplicationController
  def preview
    @result = Mustache.render( template.data, :bars => Bar.limit(template.data_count ) ).html_safe
  end
end

Вид

<%= @result %>

Маршрут

get 'templates/:id/preview' => 'templates#preview', :as => 'templates_preview'

Данные

y Bar.all

--- 
- !ruby/object:Bar
  attributes: 
    guid: "1"
    name: "test1"
- !ruby/object:Bar
  attributes: 
    guid: "2"
    name: "test2"

Шаблон (я упростил HTML для примера)

<html>
<head>
</head>
<body>
  {{#bars}}
    <a href="{{guid}}">{{name}}</a>
  {{/bars}}
</body>
</html>

Результат

<html>
<head>
</head>
<body>
    <a href=""></a>
</body>
</html>

Ожидание

<html>
<head>
</head>
<body>
    <a href="1">test1</a><a href="2">test2</a>
</body>
</html>

Я надеюсь, что есть простой ответ на этот вопрос, и я просто скучаю по нему.Спасибо.

1 Ответ

6 голосов
/ 12 марта 2011

Работает ли это, если вы измените свой контроллер на:

@result = Mustache.render( template.data, :bars => Bar.limit(template.data_count).all ).html_safe

(добавлен вызов на .all после Bar.limit(template.data_count))

Я довольно новичок в Усы, но взглянув очень быстро через код , кажется, показывает, что он вызывает это для секции:

v = [v] unless v.is_a?(Array) || defined?(Enumerator) && v.is_a?(Enumerator)

Bar.limit(template.data_count) возвращает ActiveRecord::Relation, что не является ниArray или Enumerator.Вызов .all для отношения превращает его в массив, и должен привести к тому, что Усы соответственно передадут его в раздел.

...