2012-09-02 16 views
0

我想在rails中创建发票。发票可以有项目,每个项目将有数量&价格。这是我们每天看到的典型发票。在rails中的发票模型和视图 - 如何

为了创建发票什么是最好的方法。

  1. 什么是发票和物品的通用模式?

  2. 正如我所看到的项目将是一个单独的模型。但是,我们怎样才能有一个发票视图,它可以创建发票和添加到它的项目?

例如我想创建这样的样品形式发票:http://sourceforge.net/projects/gal/screenshots/48841


更新:

除了以下链接的答案是解决问题的有用: 发票示例:https://github.com/linkworks/invoices

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

而且瑞安贝茨创造了一个Rails插件用于同一目的!: https://github.com/ryanb/nested_form


更新2:

正是我一直在寻找另一种解决方案: Google cached version

回答

1

我将有一个发票模型,该产品模型,以及连接在一起的模型,你可以保存数量,价格等方面:

class Invoice < ActiveRecord::Base 
    has_many :invoice_items 
    has_many :items, :through => :invoice_items 
end 

class InvoiceItem < ActiveRecord::Base 
    belongs_to :invoice 
    belongs_to :item 
end 

class Item < ActiveRecord::Base 
    has_many :invoice_items 
    has_many :invoices, :through => :invoice_items 
end 

的InvoiceItem模式将包含为relavent之间的联系的任何数据一张发票和一件物品。这将包括诸如价格,数量,折扣或其他任何您可能拥有的东西。

要回答关于拥有单一视图的第二个问题,我可以通过发票资源公开此问题。

class InvoicesController < ApplicationController 
    def show 
    @invoice = Invoice.find(params[:id]).includes(:invoice_items => :items) 
    end 
end 

那么你的观点可以遍历项目:

<% @invoice.invoice_items.each do |item| %> 
    <%= item.quantity %> 
<% end %> 
+0

感谢您的解决方案。对于第二个问题,我们如何创建一个包含物品的新发票。因为我隐约明白我们需要使用partials? – 18bytes

+0

是的,你可以使用partials,我强烈推荐它,但它不是必需的。我在答案中没有涉及到的原因是因为它有点难以解释,而我试图解决的一点是你只是迭代这些项目。 –

+0

非常感谢解决方案。我在同一行发现了一个示例应用程序:https://github.com/linkworks/invoices – 18bytes

相关问题