如何在RABL生成的视图中过滤结果

时间:2012-07-01 14:58:20

标签: ruby-on-rails rest devise rabl

我正在使用RABL来渲染JSON。 我有这些模型:

  1. Project
  2. Task
  3. User
  4. “show project”操作应该导致呈现项目的详细信息,包括项目中的任务列表,但只允许用户被允许查看的那些

    到目前为止,我已将所有任务添加到项目show.rabl,并且工作正常:

    child tasks: :tasks do
      extends "task/show"
    end
    

    有没有办法告诉RABL只渲染回答给定条件的任务? - 我已经在控制器中有了这个逻辑,但我无法想办法告诉RABL ...

    - 更新 -

    通过添加“代码”部分,传入项目对象,然后从可见任务构建哈希并渲染它,我想办法做到这一点。这是有效的,但它非常难看,并且首先违背了使用RABL的目的。 看起来大致如此:

    code :tasks do |project|
      project.tasks.visible_by(current_user).inject([]){|arr, task| ...}
    end
    

    我确定我的用例不是那么独特。有没有更直截了当的方法呢?

1 个答案:

答案 0 :(得分:0)

我会将您的模型中的查询重构为一个名为specific_tasks的方法,然后从RABL调用这样的内容:

child specific_tasks: :tasks do
  extends "task/show"
end