2013-03-13 111 views
1

我正在尝试使用RABL API构建自定义集合。我有一个拥有一系列idea_actions的Idea模型。我需要使用RABL添加一个自定义的想法集合,但是我似乎无法使用child:idea_actions,因为我需要了解当前的操作。下面的错误代码...任何解决方案如何获得我想要的自定义集合?RABL - 自定义集合

object @idea 

attributes *Idea.column_names 

# need access to current action 
node :idea_actions do 
    @idea.idea_actions.each do |action| 
    { :id => action.id} 
    { :custom_stuff => action.some_method } if action.something? 
    end 
end 

# can't do that... 
# child :idea_actions 

回答

2

我有一个类似的用例。这是我必须做得到这个工作:

解决方案1 ​​

  • 介绍部分呈现孩子的属性(_idea_action.rabl

    attributes :id 
    if root_object.something? 
        :custom_stuff => root_object.some_method 
    end 
    
  • 修改您的主视图以扩展新的部分

    child(:idea_actions) { 
        extends("_idea_action") 
    } 
    

解决方案2

node :idea_actions do 
    @idea.idea_actions.map do |action| 
    { :id => action.id}.tap do |hash| 
     hash[:custom_stuff] = action.some_method if action.something? 
    end 
    end 
end 

解决方案3

child :idea_actions do 
    attributes :id 
    node(:custom_stuff, :if => lambda {|action| action.something?}) do |action| 
    action.some_method 
    end 
end 
+0

只有当我想要孩子模式,而不是自定义/有条件的东西的标准属性,将工作。 – alexs333 2013-03-13 23:52:00

+0

更新了答案看看。 – 2013-03-13 23:54:45

+0

走了。给定上下文中的root_object是子项的集合,而不是单个对象。 – alexs333 2013-03-14 00:03:48