2016-11-09 2 views
0

Я работал над созданием pdf-квитанций в моем простом приложении. Я смог заставить его работать для типичных/в основном жестко закодированных записей. Однако, когда я хочу, чтобы pdf распечатывал суммы для определенного платежа (это не жестко закодировано), я получаю эту ошибку в файле charges_controller.rb - «неопределенная локальная переменная или метод« сумма »для #« Я перечислял ниже мой конкретный github, а также соответствующий ниже. Большое вам спасибо за вашу помощь, ребята :)Создание PDF-файлов с нуля на Rails

Точное сообщение об ошибке:

неинициализированным постоянной Charge :: Сумма приложение/модели/charge.rb: 18: в receipt' app/controllers/charges_controller.rb:64:in блоке (2 уровня) в шоу» приложение/контроллеры/charges_controller.rb: 60: в `шоу»

Github - https://github.com/OmarZV/PDF

charges_controller.rb

class ChargesController < ApplicationController 
before_action :authenticate_user! 
before_action :set_charge, only: [:show] 
def index 
@charges = Charge.all 
end 
def new 
@charge = Charge.new 
end 
def create 
@charge = Charge.new(charge_params) 
respond_to do |format| 
if @charge.save 
format.html { redirect_to @charge, notice: 'Charge was successfully created.' } 
    format.json { render :show, status: :created, location: @charge } 
    else 
    format.html { render :new } 
    format.json { render json: @charge.errors, status: :unprocessable_entity } 
    end 
end 
end 
def show 
respond_to do |format| 
    format.html 
    format.json 
    format.pdf { 
    send_data @charge.receipt.render, 
     filename: "#{@charge.created_at.strftime("%Y-%m-%d")}-gorails-receipt.pdf", 
     type: "application/pdf", 
     disposition: :inline 
    } 
end 
end 
private 
def set_charge 
@charge = current_user.charges.find(params[:id]) 
end 
end 

charge.rb, когда он работает

class Charge < ApplicationRecord 
belongs_to :user 
def receipt 
Receipts::Receipt.new(
id: id, 
    product: "GoRails", 
    company: { 
    name: "One Month, Inc.", 
    address: "37 Great Jones\nFloor 2\nNew York City, NY 10012", 
    email: "[email protected]", 

    }, 
    line_items: [ 
    ["Date",   created_at.to_s], 
    ["Account Billed", "(#{user.email})"], 
    ["Product",  "GoRails"], 
    ["Amount",   "Amount"], 
    ["Charged to",  "{Card_type}"], 

    ]  
) 
end 
end 

charge.rb, когда он не работает

class Charge < ApplicationRecord 
belongs_to :user 
def receipt 
Receipts::Receipt.new(
id: id, 
    product: "GoRails", 
    company: { 
    name: "One Month, Inc.", 
    address: "37 Great Jones\nFloor 2\nNew York City, NY 10012", 
    email: "[email protected]", 

    }, 
    line_items: [ 
    ["Date",   created_at.to_s], 
    ["Account Billed", "(#{user.email})"], 
    ["Product",  "GoRails"], 
    ["Amount",   "$#{Amount/100}.00"], 
    ["Charged to",  "#{Card_type} (**** **** **** #{Card_last4})"], 

    ]  
) 
end 
end 

user.rb

class User < ApplicationRecord 
devise :database_authenticatable, :registerable,:recoverable, :rememberable, :trackable, :validatable 
has_many :charges 
end 
+0

Пожалуйста, обратите внимание на [Проводка хорошие вопросы] (http://stackoverflow.com/help/how-to-ask), который подробно и полезные инструкции, которые помогут нам помочь тебе. Какую строку представляет ошибка? Пожалуйста, напишите полную ошибку, вы отключили ее слишком рано. Пожалуйста, отформатируйте свой код. – Genzume

+0

Я уверен, что вы не разместили часть своего кода, откуда исходит ошибка. Можете ли вы опубликовать исходную ошибку, включая файл, из которого он поступает? \ –

+0

max и Tyler благодарит вас за ваши комментарии, извинился за то, как был представлен вопрос. Я только что ввел полное исходное сообщение об ошибке, а также charge.rb (когда он работает и дает мне pdf) и charge.rb (что я хочу, но дает мне ошибку). Еще раз спасибо – Omar

ответ

1

У вас есть капитал Amount в вашей модели, который будет ссылаться на константу. Он должен быть нижним регистром amount, чтобы вместо этого использовать атрибут записи заряда.

Я думаю, что должно быть: ["Amount", "$#{amount/100}.00"]

+1

Это отлично работает :) Я создал эшафот с моими атрибутами, заглавными, когда они всегда должны быть строчными. – Omar

Смежные вопросы