2017-10-24 11 views
0

私は構築しているプラ​​ットフォームで動的に作成されたHTMLビューを生成する必要があるPDFジェネレータに取り組んでいます。 私は、PDFを生成するためのボタンを押したときに、このエラーを受け取りました。引数の数が間違っています(与えられた2、予想される3..4) 私はこれを解決しようとしていますが、成功しません。 バージョンレール4.2.6。Rails 4:間違った引数の数を解決するには(与えられた2、予想される3..4)

CTRLと輸出acctionsは最後にあります。

class StudyVersionsController < ApplicationController 

    before_action :authenticate_user! 
    before_action :authorized? 
    before_action :set_study_version, only: [:show, :edit, :update, :destroy] 

    def edit 
    obtain_token 
    if @token.nil? 
     flash[:error] = "The study is locked for editing by another user." 
     redirect_to request.referer 
    else 
     current_id = @study_version.id 
     @study_version = @study_version.edit_version 
     if current_id != @study_version.id 
     AuditTrail.update_item_event(current_user, @study.identifier, @study_version.semantic_version, "Study version created") 
     end 
     AuditTrail.update_item_event(current_user, @study.identifier, @study_version.semantic_version, "Study version updated") 
    end 
    end 

    def status 
    obtain_token 
    if @token.nil? 
     flash[:error] = "The study is locked for editing by another user." 
     redirect_to request.referer 
    end 
    end 

    def update_status 
    find_token 
    if @token.nil? 
     flash[:error] = "The changes were not saved as the edit lock has timed out." 
    else 
     @study_version.update_state(the_params) 
     AuditTrail.update_item_event(current_user, @study.identifier, @study_version.semantic_version, "Study version updated") 
     @token.release 
    end 
    redirect_to history_study_path(@study) 
    end 

    def soa 
    @study_version = StudyVersion.find(params[:id]) 
    render text: @study_version.soa.html_safe 
    end 

    def clear 
    find_token 
    if @token.nil? 
     render :json => {:errors => ["The changes were not saved as the edit lock has timed out."]}, :status => 422 
    else 
     result = Visit.where(study_version_id: params[:id]).destroy_all 
     result = Form.where(study_version_id: params[:id]).destroy_all 
     render :json => {}, :status => 200 
    end 
    end 

    def update 
    find_token 
    if @token.nil? 
     render :json => {:errors => ["The changes were not saved as the edit lock has timed out."]}, :status => 422 
    else 
     @study_version.update(the_params) 
     if @study_version.errors.empty? 
     render json: { data: @study_version.to_hash }, :status => 200 
     else 
     render :json => { :errors => @study_version.errors.full_messages}, :status => 422 
     end 
    end 
    end 

    def show 
    @study_version = StudyVersion.find(params[:id]) 
    @study = Study.find(@study_version.study_id) 
    respond_to do |format| 
     format.html 
     format.json do 
     render json: { data: @study_version.to_hash }, :status => 200 
     end 
    end 
    end 

    def destroy 
    obtain_token 
    if @token.nil? 
     flash[:error] = "The study is locked for editing by another user." 
    else 
     @study_version.destroy 
     AuditTrail.delete_item_event(current_user, @study.identifier, @study_version.semantic_version, "Study version deleted") 
     @token.release 
    end 
    redirect_to history_study_path(@study) 
    end 

    def export 
    study_version = StudyVersion.find(params[:id]) 
    study = Study.find(study_version.study_id) 
    lock = Token.obtain("#{study.identifier}_#{the_params[:export_type].upcase}", "", current_user) 
    if !lock.nil? 
     @lock_id = lock.id 
     case the_params[:export_type] 
     when "json" 
      @path = export_json_study_version_path(study_version) 
     when "odm" 
      @path = export_odm_study_version_path(study_version) 
     when "als" 
      @path = export_als_study_version_path(study_version) 
     when "crf" 
      @path = export_crf_study_version_path(study_version) 
     when "acrf" 
      @path = export_acrf_study_version_path(study_version) 
     else 
      @path = export_json_study_version_path(study_version) # Default to JSON for the moment 
     end 
     respond_to do |format| 
     format.html {render :layout => 'export'} 
     end 
    else 
     @lock_id = 0 
     respond_to do |format| 
     flash[:error] = "Someone else is curently exporting this item. Try again in a minute." 
     format.html {render :layout => 'export'} 
     end 
    end 
    end 

    def export_json 
    study_version = StudyVersion.find(params[:id]) 
    study = Study.find(study_version.study_id) 
    lock = Token.obtain("#{study.identifier}_JSON", "", current_user) 
    study = Study.find(study_version.study_id) 
    hash = study_version.to_full_hash 
    send_data hash.to_json, filename: "#{study_version.name}.json", :type => 'application/json; header=present', disposition: "attachment" 
    lock.release 
    end 

    def export_odm 
    study_version = StudyVersion.find(params[:id]) 
    study = Study.find(study_version.study_id) 
    lock = Token.obtain("#{study.identifier}_ODM", "", current_user) 
    xml = study_version.to_xml 
    send_data xml, filename: "#{study_version.name}.xml", :type => 'application/xhtml+xml; header=present', disposition: "attachment" 
    lock.release 
    end 

    def export_als 
    study_version = StudyVersion.find(params[:id]) 
    study = Study.find(study_version.study_id) 
    lock = Token.obtain("#{study.identifier}_ALS", "", current_user) 
    filename = "#{study_version.name}.xls" 
    result = study_version.to_als(filename) 
    lock.release 
    if result[:error_count] == 0 
     send_file result[:full_path], :type => "application/vnd.ms-excel", :filename => filename, :stream => false 
    else 
     flash[:error] = result[:error_message] 
     respond_to do |format| 
     format.html {render :layout => 'export'} 
     end 
    end 
    end 

    def export_crf 
    html = "" 
    study_version = StudyVersion.find(params[:id]) 
    study = Study.find(study_version.study_id) 
    lock = Token.obtain("#{study.identifier}_CRF", "", current_user) 
    forms = Form.where(study_version_id: study_version.id).order('ordinal asc') 
    forms.each do |form| 
     html += PdfReport.page_break 
     # html += CdiscChangesReport.page_break 
     html += Mdr.form_to_html(form.form_id, form.form_namespace, true).html_safe 
    end 
    pdf = PdfReport.create("Case Report Form", "#{study.label}", current_user, html) 
    send_data pdf, filename: "#{study.identifier}_CRF.pdf", type: 'application/pdf', disposition: 'attachment' #'inline' 
    lock.release 
    end 

    def export_acrf 
    html = "" 
    study_version = StudyVersion.find(params[:id]) 
    study = Study.find(study_version.study_id) 
    lock = Token.obtain("#{study.identifier}_ACRF", "", current_user) 
    forms = Form.where(study_version_id: study_version.id).order('ordinal asc') 
    forms.each do |form| 
     html += PdfReport.page_break 
     # html += CdiscChangesReport.page_break 
     html += Mdr.form_to_html_annotations(form.form_id, form.form_namespace, true).html_safe 
    end 
    #pdf = PdfReport.create("Annotated CRF", "#{study.label}", current_user, html) 
    pdf = PdfReport.create("Annotated CRF", "#{study.label}", current_user, html) 
    send_data pdf, filename: "#{study.identifier}_aCRF.pdf", type: 'application/pdf', disposition: 'attachment' #'inline' 
    lock.release 
    end 

private 

    def obtain_token 
    @study_version = StudyVersion.find(params[:id]) 
    @study = Study.find(@study_version.study_id) 
    @token = Token.obtain(@study.identifier, @study_version.semantic_version, current_user) 
    return @token 
    end 

    def find_token 
    @study_version = StudyVersion.find(params[:id]) 
    @study = Study.find(@study_version.study_id) 
    @token = Token.find_token(@study.identifier, current_user) 
    return @token 
    end 

    def authorized? 
    authorize StudyVersion 
    end 

    def the_params 
    params.require(:study_version).permit(:study_id, :name, :description, :protocol_name, :state, :export_type) 
    end 

    # Use callbacks to share common setup or constraints between actions. 
    def set_study_version 
    @study_version = StudyVersion.find(params[:id]) 
    end 

end 

モデルとラインPDF = CdiscChangesReport.new.createに私がエラーを持っている:

class PdfReport 

    C_CLASS_NAME = "PdfReport" 

    def self.create(title, sub_title, user, body_html) 
    paper_size = "A4" 
    html = page_header() 
    html += title_page(title, sub_title, user) 
    # Document history 
    html += body_html 
    # Completion instructions 
    html += page_footer() 
    #ConsoleLogger.log(C_CLASS_NAME, "create", "HTML=" + html.to_s) 
    #pdf = WickedPdf.new.pdf_from_string(html, :page_size => paper_size, :footer => {:font_size => "10", :font_name => "Arial, \"Helvetica Neue\", Helvetica, sans-serif", :left => "", :center => "", :right => "[page] of [topage]"}) 
    pdf = CdiscChangesReport.new.create(html, :page_size => paper_size, :footer => {:font_size => "10", :font_name => "Arial, \"Helvetica Neue\", Helvetica, sans-serif", :left => "", :center => "", :right => "[page] of [topage]"}) 

    return pdf 
    end 

    def self.page_header 
    html = "<html><head>" 
    html += "<style>" 
    html += "h1 { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 24pt; line-height: 34pt; }\n" 
    html += "h1.title { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 24pt; line-height: 30pt; text-align: center; margin-top: 0; }\n" 
    html += "h2 { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 18pt; line-height: 28pt; }\n" 
    html += "h2.title { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 18pt; line-height: 24pt; text-align: center; margin-top: 0; }\n" 
    html += "h3 { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 16pt; }\n" 
    html += "h4 { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 14pt; }\n" 
    html += "h5 { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 12pt; }\n" 
    html += "p { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; }\n" 
    html += "table tr td { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; text-align: left; vertical-align: top; padding: 5px;}\n" 
    html += "table.simple { border: 1px solid black; border-collapse: collapse; width: 100%;}\n" 
    html += "table.simple tr td { border: 1px solid black; font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; text-align: left; vertical-align: top; padding: 5px;}\n" 
    html += "table.simple tr th { border: 1px solid black; font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; text-align: left; vertical-align: top; padding: 5px;}\n" 
    html += "table.form_table { border: 1px solid black; width: 100%;}\n" 
    html += "table.form_table tr td { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; text-align: left; vertical-align: top; padding: 5px;}\n" 
    html += "table.form_table h4 { vertical-align: middle;}\n" 
    html += "table.form_table td:first-child{ font: bold; }\n" 
    html += "table.form_repeat { border: 1px solid black; width: 100%;}\n" 
    html += "table.form_repeat th { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; text-align: left; vertical-align: top; }\n" 
    html += "table.form_repeat tr td { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; text-align: left; vertical-align: top;}\n" 
    html += "table.details tr td { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 11pt; text-align: left; vertical-align: top; padding: 1px; }\n" 
    html += "table.ci { border: 1px solid black; width: 100%; border-collapse: collapse;}\n" 
    html += "table.ci tr td { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; text-align: left; vertical-align: top; padding: 5px; border-bottom: 1pt solid black; }\n" 
    html += ".ci td table, .ci td table tbody, .ci td table td { border:none; }\n" # Stops inheritence into markdown 
    html += "table.note { border: 1px solid black; width: 100%;}\n" 
    html += "table.note tr td { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; font: bold; text-align: left; vertical-align: top; }\n" 
    html += "table.input_field { border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black;}\n" 
    html += "table.input_field tr td { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 8pt; text-align: center; vertical-align: center; padding: 5px; }\n" 
    html += "table.input_field td:not(:last-child){border-right: 1px dashed}\n" 
    html += "table.cl_field tr td { font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10pt; text-align: left; vertical-align: center; padding: 2px; }\n" 
    html += "table.cl_field td:first-child{ border: 1px solid black; }\n" 
    html += "tr.warning { background-color: #fcf8e3 !important; }\n" 
    html += "</style>" 
    html += "</head><body>" 
    return html 
    end 

    def self.page_footer 
    html = "</body></html>" 
    return html 
    end 

    def self.title_page(title, sub_title, user) 
    name = ENV['organization_title'] 
    image_file = ENV['organization_image_file'] 
    dir = Rails.root.join("app", "assets", "images") 
    file = File.join(dir, image_file) 
    time_generated = Time.now 
    # Generate HTML 
    html = "<br><br><div style=\"text-align: center;\"><img src=\"#{file}\" style=\"height:75px;\"></div>" 
    html += "<h2 class=\"title\">#{name}</h2>" 
    html += "<br>" * 10 
    html += "<h1 class=\"title\">#{title}<br>#{sub_title}</h1>" 
    html += "<br>" * 23 
    html += "<table class=\"details\" align=\"right\"><tr><td>Run at:</td><td>#{time_generated.strftime("%Y-%b-%d, %H:%M:%S")}</td></tr><tr><td>Run by:</td><td>#{user.email}</td></tr></table>" 
    html += page_break 
    return html 
    end 

    def self.page_break 
    return "<p style='page-break-after:always;'></p>" 
    end 

end 
+0

この 'CdiscChangesReport'クラスはどこから来たのですか?その源は何ですか?おそらくそれを間違った方法で初期化します(コンストラクタに2つのパラメータを渡しますが、3または4が必要です)。 –

+0

これは、宝石から来ています。https://github.com/Jakub41/pdf-report-generator @MarekLipka – Jakub

+0

あなたは 'def self.create(title、sub_title、user、body_html)'をどのように呼び出すのですか? ' CdiscChangesReport.new.create(html、:page_size => paper_size、:footer => {etc..etc...etc ... "})'パラメータを確認したい場合 –

答えて

0

あなたはCdiscChangesReport#createを呼び出します3つまたは4つのパラメータを受け入れる一方、2つのパラメータを使用して、ここのソースによれば、

https://github.com/Jakub41/pdf-report-generator/blob/master/lib/pdf/report/generator/cdisc_changes_report.rb#L13

+0

Okと残りのパラメータは何ですか? – Jakub

+0

私はこの宝石についてあなたが知っているよりも少なくてよく分かりません(この質問を見る前に私はそれを見たことがありません)、それは非常に具体的で広く使われていません。私はあなたがこの宝石またはその源の文書を掘り起こして、あなたがそれをどのように使うべきかを知る必要があると思います。 –

関連する問題