ruby-on-rails-3 - 如何将对象从 rake 任务传递给 rabl View

标签 ruby-on-rails-3 json rabl

我正在尝试使用 rabl 从 rake 任务创建一个 json 文件。下面我有一个简化版本来测试。

当我通过 url 查看“articles.json”或“articles/2.json”时,我得到了预期的 json 响应。

但是当我尝试通过 rake 任务运行它时,它在创建的 jsonFile 中始终为 @articles 设置一个空值。它将呈现 index.json.rabl View 的次数与@articles.count 相同,但值始终为空。

那么如何将在我的 rake 任务中创建的 @articles 对象传递给 Rabl.render?

index.json.rabl

@feedName ||= 'default'
node(:rss) { partial('articles/rss), :object => @feedName }
node(:headlines) { partial('articles/show'), :object => @articles }

显示.json.rabl

object @article
attributes :id,:body
....

导出.rake

task :breakingnews => :config do
  filename = 'breakingnews.json'
  jsonFile = File.new(filename)
  @articles = Article.limit(10)
  n = Rabl::renderer.json(@articles,'articles/index',view_paths => 'app/views')
  jsonFile.puts b
  jsonFile.close

最佳答案

我遇到了类似的问题。您基本上有 2 个选择:

  1. 将单个对象明确地作为参数传递
  2. 按范围隐式传递多个对象

按参数

在你的任务中

@your_object = ...
Rabl.render(@your_object, 'your_template', view_paths => 'relative/path/from/project/root', :format => :json)

在你的 Rabl 模板中

object @any_name_you_like
attributes :id,:body
....

这会将您的模板呈现为 json,并将指定的对象作为其实例对象(您可以随意命名)

按范围

这有点棘手。我找到的唯一选择是将所需对象设置为调用范围中的实例变量,并设置此范围以呈现模板(请参阅范围)。

在你的任务中

@one_object = ...
@another_object = ...
Rabl.render(nil, 'your_template', view_paths => 'relative/path/from/project/root', :format => :json, :scope => self)

在你的 Rabl 模板中

object @one_object
attributes :id,:body
node(:my_custom_node) { |m| @another_object.important_stuff }

关于ruby-on-rails-3 - 如何将对象从 rake 任务传递给 rabl View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708046/

相关文章:

ruby - 为什么 rvm install ruby​​ 不起作用?

c# - 来自 SQL Server 的 json 格式响应如何工作?

java - 检查 JSONObject 是否匹配 JSON boolean 表达式

javascript - XML 字符串到 JSON javascript

ruby-on-rails - 在 RABL 中使用 JSON 中的辅助方法?

ruby-on-rails - 使用 RABL 和 Draper 渲染 to_json

ruby-on-rails - 如何在没有 "root"节点和 rabl 的情况下使用不同的模板进行收集

ruby - 指定范围之间的时间

ruby-on-rails - 当前页面?方法

ajax - 没有页面刷新,Rails 3 ajax 更新部分不起作用