将 rails 变量传递给 .Rmd 文件以呈现 R markdown

Passing rails variables to .Rmd files for rendering R markdown

我正在使用 rails 呈现 R markdown 文件以生成报告。我有来自 Controller 的实例变量。

.rmd 文件位于 views 文件夹中。我在下面调用控制器

File.read('path/to/file_name')

读取.Rmd 文件。以下是无法正常工作的 .Rmd 文件片段。

---
title: "Result Report"
params:
 selected_id: <%= "#{@result_id}" %>
 selected_gene: <%= "#{@gene}" %>
 selected_experiment: <%= "#{@experiment.id}" %>

想知道如何实现它。卡在这里一段时间。欢迎任何想法。谢谢

我猜你想在浏览器中生成报告,因为你提到了控制器。

假设您现在要查看的 URL 实验是 /experiments/32/show

你可以使用这样的扩展 /experiments/32/show.report 查看生成的报告

要做到这一点,您需要三件事

  1. 更换控制器
# app/controllers/experiments_controller.rb

class ExperimentsController < ApplicationController
  def show
    @experiment = Experiment.find(params[:id])
    @gene = ...
    @result_id = ...
    respond_to do |format|
      format.html
      format.report 
    end
  end
end
  1. 注册 report MIME 类型

按照指示in the rails guides 您需要在初始化程序中添加一行mime_types.rb(如果没有则创建一个空文件)

# config/initializers/mime_types.rb

Mime::Type.register "application/rtf", :report
  1. 使用 ERB 创建 .report 模板
# app/views/experiments/show.report.erb

---
title: "Result Report"
params:
 selected_id: <%= @result_id %>
 selected_gene: <%= @gene %>
 selected_experiment: <%= @experiment.id %>

我找到了一个简单的解决方案。你必须先阅读文件,然后你可以使用 gsub 来替换你想要的内容。

rmd_file = File.read("path/to/rmdFile")
rmd_file.gsub!('print_selected_gene', "\"#{@gene}\"")

这样你就可以随意替换文件了。