1

Mustacheテンプレートを使用しており、RoR Webアプリケーションで、テンプレートとデータベースに保存したデータを組み合わせたプレビュービューを作成したいのですが、インターネットで検索した後( SO!)、アクティブなモデルを含む例は見つかりませんでした。

ActiveModelレコードをMustacheにパイプして、テンプレートとマージするにはどうすればよいですか?

セットアップ:

スキーマ

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>

私はこれに対する簡単な答えがあることを望んでいます、そして私はそれをただ逃しています。ありがとう。

4

1 に答える 1

6

コントローラを次のように変更した場合、機能しますか?

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

.all( afterへの呼び出しを追加しましたBar.limit(template.data_count)

私はMustacheを初めて使用しますが、コードをすばやく確認すると、セクションに対してこれが呼び出されていることがわかります。

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

Bar.limit(template.data_count)を返しますがActiveRecord::Relation、これはanArrayでも。でもありませんEnumerator。リレーションを呼び出す.allと、それが配列に変わり、Mustacheがそれに応じてセクションに渡す必要があります。

于 2011-03-12T17:20:59.060 に答える