我使用RABL作为JSON API的基础。我需要在模板中显示一个对象(@user)和一个集合(@posts)。通常,这是没有问题的。@posts是@user的子元素,所以,我只需要这样做:
object @user
attributes :id, :name
child :posts do |post|...
问题是,我通过控制器中的助手方法(by_category)运行@posts,如下所示:
@user = User.find(params[:id])
@posts = @user.posts.by_category(params[:category])
通过仅将帖子作为子节点获取,我不应用helper方法-并且我不能按类别获取帖子。
我想知道如何最好地解决这个问题,如果有一种方法可以在同一个RABL模板中显示对象和集合?
在文档中,您可以像以下示例一样在局部部分中包含局部变量:
你还可以传入其他实例变量,以便在你的模板中使用:
Rabl::Renderer.new('posts/show', @post, :locals => { :custom_title => "Hello world!" })
然后,在你的模板中,你可以使用@custom_title作为:
attribute :content
node(:title) { @custom_title }
这允许您使用如下内容:
控制器:
Rabl::Renderer.new('user/show', @user, :locals => { :posts_category => "examples" })
部分:attribute id
node(:posts) { |user| user.posts.by_category(@posts_category) }