将rails变量传递到.Rmd文件以渲染R markdown

问题描述 投票:0回答:2

我正在使用Rails渲染R降价文件以生成报告。我有来自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}" %>

想知道如何实现。在这里停留了一段时间。任何想法都欢迎。谢谢。

r ruby-on-rails ruby ruby-on-rails-5
2个回答
1
投票

由于您提到控制器,我猜您想在浏览器中生成报告。

假设您现在要查看实验的网址是/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 %>

0
投票

我找到了一个简单的解决方案。您必须先阅读文件,然后才能使用gsub替换所需的内容。

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

通过这种方式,您可以随时替换文件。

© www.soinside.com 2019 - 2024. All rights reserved.