I am creating a system to track equity positions ... I will enter a
Trade and a Position will be created as a result ... I may have one or
more Trades that make up a Position. Positions can be open or closed.
What is the best way to generate the Position object?
When a new trade is created, you need to check whether this trade is
for an existing position, or whether a new position should be created.
Should I insert the code to create it manually (below) when the Trade
object is created?
I would move that code into the Trade model class. The following
assumes that there is no data required to create a position:
class Trade < ActiveRecord::Base
self.position = Position.create
In your view, make sure you have a trade_position_id field that is
populated if the trade should be added to an existing position.
The before_save hook gets called after the validation, so you can be
reasonably sure that the subsequent save() call will succeed.
Regardless, you should wrap the @trade.save() call in your controller
in a transaction so that the creation of the position gets rolled back
if saving of the trade fails for some reason.