我目前正在使用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时,绝对不是零。我无法弄清楚控制器和模板之间的数据发生了什么。
答案 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 在模板内部。