Передача переменных rails в файлы .Rmd для рендеринга R markdown - PullRequest
0 голосов
/ 27 февраля 2020

Я использую рельсы для рендеринга файлов R уценок для создания отчета. У меня есть переменные экземпляра из контроллера.

.Rmd файл находится в папке представлений. Я звоню ниже в контроллер

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

, чтобы прочитать файл .Rmd. Ниже приведен фрагмент файла .Rmd, который не работает.

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

Хотите знать, как этого добиться. Застрял здесь на некоторое время. Любые идеи приветствуются. Спасибо.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Я предполагаю, что вы хотите сгенерировать отчет в браузере, поскольку вы упомянули контроллер.

Допустим, у вас есть 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
Зарегистрируйте тип report MIME

В соответствии с инструкциями в направляющих рельсов Вам необходимо добавить строку в инициализаторе mime_types.rb (создать пустой файл, если вы не имеют)

# config/initializers/mime_types.rb

Mime::Type.register "application/rtf", :report
Создайте шаблон .report, используя ERB
# app/views/experiments/show.report.erb

---
title: "Result Report"
params:
 selected_id: <%= @result_id %>
 selected_gene: <%= @gene %>
 selected_experiment: <%= @experiment.id %>
0 голосов
/ 28 февраля 2020

Я нашел простое решение для этого. Сначала вы должны прочитать файл, и вы можете использовать gsub для замены содержимого, которое вы хотите.

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

Таким образом, вы можете заменить файл в любом случае.

...