0
我有一個發票控制器和兩個模型發票和invoice_line_items,並使用invoice_line_item類創建tax_line_items。下面是我的代碼:如何編輯與has_many關係相關的訂單項,但使用單個類?
這裏是我的控制器代碼:
class InvoicesController < ApplicationController
def new
@menu = 'Income'
@page_name = 'Create new invoice'
@invoice = Invoice.new
@invoice.invoice_line_items.build
@invoice.tax_line_items.build
respond_to do |format|
format.html
format.xml { render :xml => @invoice }
end
end
end
我的發票型號:
class Invoice < ActiveRecord::Base
has_many :invoice_line_items
has_many :tax_line_items, :class_name => "InvoiceLineItem",:dependent => :destroy
accepts_nested_attributes_for :invoice_line_items, :reject_if => lambda {|a| a[:account_id].blank? } , :allow_destroy => true
accepts_nested_attributes_for :tax_line_items, :reject_if => lambda {|a| a[:account_id].blank? } , :allow_destroy => true
end
,並在我的方式,我用:
<%= form_for(@invoice) do |f| %>
<%= render 'shared/form_error', :object => @invoice %>
<% @invoice.invoice_line_items.each_with_index do |invoice_line_item, index| %>
<%= render "invoice_line_items", :invoice_line_item => invoice_line_item, :index => index %>
<% end %>
<% @invoice.tax_line_items.each_with_index do |tax_line_item, tax_index| %>
<%= render "tax_line_items", :tax_line_item => tax_line_item, :tax_index => tax_index %>
<% end %>
<%end%>
諧音:
1)invo ice_line_items:
<tr id="row<%= index %>" valign="top" >
<%= hidden_field_tag "invoice[invoice_line_items_attributes][#{index}][id]",invoice_line_item.id%>
<td valign="top">
<%= select_tag "invoice[invoice_line_items_attributes][#{index}][account_id]", options_from_collection_for_select(@from_accounts, :id, :name,:selected => invoice_line_item.account_id), :include_blank => true, :class=>"full" %>
<!-- <a href="/accounts/new?account_head_id=10" > New item</a> -->
</td>
<td><%= text_area_tag "invoice[invoice_line_items_attributes][#{index}][description]",invoice_line_item.description, :class => "full", :cols => 10, :rows=>1 %></td>
<td><%= text_field_tag "invoice[invoice_line_items_attributes][#{index}][quantity]",invoice_line_item.quantity, :class => 'full', :id => 'quantity', :onkeydown => "return numbersOnly(event);", :size => 5, :maxlength => 25 %></td>
<td><%= text_field_tag "invoice[invoice_line_items_attributes][#{index}][unit_rate]",invoice_line_item.unit_rate, :class => 'full', :id => 'unit_cost', :onkeydown => "return numbersOnly(event);", :size => 5, :maxlength => 20 %></td><!--Jquery code is in application.js-->
<td><%= text_field_tag "invoice[invoice_line_items_attributes][#{index}][discount_percent]", invoice_line_item.discount_percent, :class => 'full', :id => 'discount', :onkeydown => "return numbersOnly(event);", :maxlength => 5, :size => 5%></td>
<td><%= text_field_tag "invoice[invoice_line_items_attributes][#{index}][amount]", invoice_line_item.amount, :class => 'full', :id => 'total', :readonly => 'readonly', :size => 5%></td>
<td><%= link_to image_tag("/images/black_icon/ic_cancel.png"),{:action => :remove_line_item, :index => index}, :remote => true unless index == 0 %></td>
</tr>
和2)tax_line_items:
<tr id="tax_row<%= tax_index %>" valign="top" >
<%= hidden_field_tag "invoice[tax_line_items_attributes][#{tax_index}][id]",tax_line_item.id%>
<%= hidden_field_tag "invoice[tax_line_items_attributes][#{tax_index}][tax]", tax_line_item.tax, :value => 1 %>
<td style="background:#EDF4FF"></td>
<td class="ta-right" style="background:#EDF4FF" colspan="2"><label>Add Tax:</label></td>
<td class="ta-right" colspan="2" style="background:#EDF4FF">
<%= select_tag "invoice[tax_line_items_attributes][#{tax_index}][account_id]", options_from_collection_for_select(@tax_accounts, :id, :name,:selected => tax_line_item.account_id), :include_blank => true, :class=>"full" %>
<!-- <a href="/accounts/new?account_head_id=10" > New item</a> -->
</td>
<td style="background:#EDF4FF"><%= text_field_tag "invoice[tax_line_items_attributes][#{tax_index}][amount]", tax_line_item.amount, :class => 'full', :id => 'tax', :onkeydown => "return numbersOnly(event);", :size => 5%></td>
<td style="background:#EDF4FF"><%= link_to image_tag("/images/black_icon/ic_cancel.png"),{:action => :remove_tax_item, :tax_index => tax_index}, :remote => true %></td>
</tr>
我可以輕鬆地添加新的行項目條目,然後編輯它,當他們是沒有稅收的項目。問題是 當他們是在任何條目中創建的稅收項目,然後嘗試編輯此條目,然後我的行項目行出現多個時間例如假設我有一個稅收項目他們一個新行將出現的發票行項目答額外行稅線項目。我認爲這會發生,因爲我已經爲這兩個訂單項使用了一張共同的表格。我這樣做是因爲我必須將兩個訂單項都保存在同一個表中,因爲這兩個帳戶都來自同一個表。 如果有人有正確的答案,我非常感謝。謝謝
謝謝@薩利爾我已經嘗試過,但正如你所說的類型列我應該嘗試這一個。再次感謝您的幫助 – Ravindra
嗨@Salil我試過這個,但我沒有成功。您是否在發票表或訂單項表 – Ravindra
@ravindra中添加了類型列,對於您關於我所鏈接的上一個問題的答案,解釋瞭如何執行此操作。正如它所說 - 通過在invoice_line_items表中添加類型列,您可以擁有模型繼承,並且同時使用同一個表。這是單表繼承。 – Salil