I have a table in my app, called entries. Entries belongs_to :users and has a field (decimal) called hours. There is another decimal field called cost. Cost is not entered by the user, but is calculated by multiplying the value in hours with the value in users named rate. To get this to work properly, I had to do the following.

First, in the entry form, make sure there is no text_field for cost. Cost is only found using a calculation.

In entries_controller.rb, edit create and update as follows:

def create
    @entry = Entry.new(params[:entry])
    @entry.cost = @entry.user.rate * @entry.hours
    
    respond_to do |format|
      if @entry.save
        format.html { redirect_to(@entry, :notice => 'Entry was successfully created.') }
      else
        format.html { render :action => "new" }
      end
    end
  end

  def update
    @entry = Entry.find(params[:id])
    total_cost = @entry.user.rate * @entry.hours
    @entry.update_attribute(:cost, total_cost)
    respond_to do |format|

      if @entry.update_attributes(params[:entry])
        format.html { redirect_to(@entry, :notice => 'Entry was successfully updated.') }
      else
        format.html { render :action => "edit" }
      end
    end
  end

There should be a way to put a method in the model to calculate the total_cost, but I haven’t successfully figured that out yet.