1

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

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
4

1 回答 1

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
于 2013-03-13T23:47:18.437 回答