首页 > 解决方案 > 将 rails 变量传递给 .Rmd 文件以呈现 R 降价

问题描述

我正在使用 rails 渲染 R markdown 文件以生成报告。我有来自控制器的实例变量。

.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}" %>

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

标签: rruby-on-railsrubyruby-on-rails-5

解决方案


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

假设您现在查看实验的 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. 注册reportMIME 类型

按照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 %>

推荐阅读