Rails发票应用程序

时间:2015-10-27 21:26:18

标签: ruby-on-rails

我想在rails中创建发票。发票可以包含物品,每件物品都有数量,税号和税号。价钱。这是我们每天看到的典型发票。

为了创建发票,最佳方法是什么。

发票和物品的常见模式是什么?

我知道物品将是一个单独的模型。但是,如何才能为发票创建一个视图,同时创建发票和添加到其中的项目?

我的意思是,在新发票页面中,会有客户列表和项目列表,但在这里我不知道如何在创建发票时进行关联。有什么好的例子我可以效仿吗?

请感谢您的帮助。或者甚至只需要了解我需要遵循的步骤,以实现这一目标......

这是我的基本ERD

enter image description here

2 个答案:

答案 0 :(得分:0)

我可以推荐使用payday gem吗?我在过去的应用程序中创建了发票模型,并且我会告诉您什么,根据您正在构建的应用程序类型,它有时会非常棘手。但除了方便因素之外,我喜欢使用这个宝石的原因是它还可以将您的发票呈现为可自定义的PDF。

它使得向发票中添加项目变得轻而易举,例如从他们的GitHub页面中添加:

invoice = Payday::Invoice.new(:invoice_number => 12)
invoice.line_items << Payday::LineItem.new(:price => 20, :quantity => 5, :description => "Pants")
invoice.line_items << Payday::LineItem.new(:price => 10, :quantity => 3, :description => "Shirts")
invoice.line_items << Payday::LineItem.new(:price => 5, :quantity => 200, :description => "Hats")
invoice.render_pdf_to_file("/path/to_file.pdf")

答案 1 :(得分:0)

相当广泛的问题,这就是我要做的事情:

#app/models/invoice.rb
class Invoice < ActiveRecord::Base
   belongs_to :user

   has_many :line_items
   has_many :items, through: :line_items

   accepts_nested_attributes_for :line_items
end

#app/models/line_item.rb
class LineItem < ActiveRecord::Base
  belongs_to :invoice
  belongs_to :item
end

#app/models/item.rb
class Item < ActiveRecord::Base
  belongs_to :company

  has_many :line_items
  has_many :invoices, through: :line_items
end

-

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :invoices
end

这将是基本级别“发票”关联结构 - 您的clients / users可以建立在它之上。

您的路线等可以如下:

#config/routes.rb
resources :invoices

#app/controllers/invoices_controller.rb
class InvoicesController < ApplicationController
   def new
      @invoice = current_user.invoices.new
      @invoice.line_items.build
   end

   def create
      @invoice = current_user.invoices.new invoice_params
      @invoice.save 
   end
end

那么您的观点将是这样的:

#app/views/invoices/new.html.erb
<%= form_for @invoice do |f| %>
   <%= f.fields_for :line_items do |l| %>
     <%= f.text_field :quantity %>
     <%= f.collection_select :product_id, Product.all, :id, :name %>
   <% end %>
   <%= f.submit %>
<% end %>

这会创建相应的@invoice,您可以按如下方式调用:{/ p>

@user.invoices.first

除此之外,我没有足够的具体信息来帮助