我会以不同的方式建模。希望这能给你一些想法......我不确定它是否会按原样工作......
class TankTransfer < AR:B
has_one :from_transfer
has_one :to_transfer
attr_accessible :from_tank
attr_accessible :to_tank
attr_accessible :amount_to_transfer
before_create :create_transfers
protected
def create_transfers
self.to_transfer.build(:tank => self.to_tank, :amount => self.amount_to_transfer)
self.from_transfer.build(:tank=> self.from_tank, :amount => -self.amount_to_transfer)
end
end
class Transfer < AR:B
belongs_to :tank
end
class Tank < AR:B
has_many :transfers
end
然后你的表格看起来像(如果你使用的是formtastic):
<% semantic_form_for @tank_transfer do |form| %>
<% form.inputs :name => "Tank transfer" do %>
<%= form.input :from_tank %>
<%= form.input :to_tank %>
<%= form.input :amount_to_transfer %>
<% end %>
<% form.buttons do %>
<%= form.commit_button %>
<% end %>
<% end %>
您的控制器将是一个非常简单的控制器,就像您在所有示例中看到的一样。