RABL集合在模板中显示为空,但在控制器中不显示

时间:2019-03-21 18:32:08

标签: ruby-on-rails json rabl

我目前正在使用rabl-rails 0.5.3和Rails 4.2.6

我在尝试从Rails控制器的index方法呈现我的College对象集合时遇到了这个问题。

这是我的控制器中index方法的简化版本:

  def index
    @colleges = College.all

    puts @colleges.count

    render 'api/data_bridge/colleges/show'
  end

我在这里看到puts语句的输出为'100'。显然@colleges不是空的。

这是rabl索引模板:

puts "---===========================-"
puts @colleges.inspect
puts "---===========================-"
collection @colleges

在服务器输出中,我看到那些puts语句如下:

---===========================-
nil
---===========================-

当我在控制器中转储@colleges时,绝对不是零。我无法弄清楚控制器和模板之间的数据发生了什么。

1 个答案:

答案 0 :(得分:1)

作为我主张的来源的文档:https://github.com/ccocchi/rabl-rails#overview

您的rabl文件应如下所示:

puts "---===========================-"
puts :@colleges.inspect
puts "---===========================-"
collection :@colleges

这是他们的例子:

# app/views/post/index.rabl
collection :@posts
attributes :id, :title, :subject
child(:user) { attributes :full_name }
node(:read) { |post| post.read_by?(@user) }

请密切注意符号前面的“:”。这是原因:

  

在任何渲染上下文之外编译模板的事实   阻止我们使用任何实例变量(node除外)   在模板中,因为它们正在渲染对象。因此,您将   必须使用这些变量的符号。例如,   在PostController内的@posts集合中,您需要使用:@posts   在模板内部。