2012-10-05 52 views
2

我想将此.json.rabl视图转换为.json.erb,并且由于im非常新,所以我正在寻找实现此目标的方向。什么是最好的方式去做这件事? 将Rabl转换为Erb json视图

object @perform 
attributes :id => :team_id 
attributes :perform_id 
node(:fb_user_id) {|x| x.user.fb_user_id.to_s} 
node(:first_name) {|x| x.user.first_name} 
node(:last_name) {|x| x.user.last_name} 
attributes :level, :jersey, :height, :weight, :positions 
node(:stat_source) {|x| Stat::SOURCES.key(x.stat_source)}

if [email protected] node({}, :if => lambda{ |m| @event.present? }) do |x| { mvp_votes: Vote.player_vote_count(@event.id, x.id) } end end

if [email protected] && (@_options[:event] || @event) node :stats do |perform| Hash[*perform.source_stats.where(event_id: (@_options[:event].try(:id) || @event.id)).map{|x|[x.name, x.value]}.flatten] end end

回答

3

Erb与模板语言(如Rabl)相反 - 您创建您想要的json,然后用erb插入值,而不是像在rabl中那样使用代码定义结构。

在周围与<%%文本ERB>表示一些红宝石代码(用于分配,循环等):

<% x = "output" %> 

和<%=%>(NB =号)表示红宝石代码(任何代码)将通过调用to_s输出到模板:

<%= x.to_json %> 

任何未被这些符号包围的东西都会完全按照原样输出。

所以你应该可以用假值创建你想要的json,然后把相关ruby代码的调用放到运行时得到真实值。例如这样的片段(不熟悉Rabl的这样的JSON格式可能需要调整):

[{ "perform" : 
    { 
    "id" : <%= @perform.team_id %>, 
    "user" : <%= @perform.perform_id %>, 
    ... 

    } 
}] 

<% if [email protected] %> 
    <% node({}, :if => lambda{ |m| @event.present? }) do |x| %> 
    { 
    mvp_votes: <%= Vote.player_vote_count(@event.id, x.id) %> 
    } 
    <% end %> 
<% end %> 

对于那些工整地映射到JSON作为哈希,例如,你也可以考虑创建to_json方法,而不是解雇他们了对象在像这样的模板中,但对于像这样的复杂结构而没有干净的映射,模板可能是最好的。

我想在一个名为xx.json.erb(纯json)的文件中使用json,然后开始使用erb插入值。

0

也许这不是一个确切问题的答案,但在轨道中执行JSON视图的认可方式是使用jbuilder

JBuilder的API与RABL的API非常相似,但它是由同一个Rails核心团队完成的,所以它与所有内部组件集成在一起,比如缓存助手(将来还有缓存依赖),partials等等。

https://github.com/rails/jbuilder