I tried out some code in my console and I am having difficulty
translating it for my view and controller so that it gives me the same
result.
My console:
@contract = Contract.new(authnum: "900700",
st_date:“2012-01-01”, end_date: “2012-30-06”)
@contract.save
@code = Code.new(code_name: "S-5463", status: "Active",
description: “This and That”)
@code.save
@codeline = @code.codelines.build(:units_alloc => "80.00",
:contract => @contract)
@codeline.save
@codeline
=> #<Codeline id: 91, contract_id: 64, code_id: 54, units_alloc:
80.00>
Using pgadmin3 I check my codelines table and I get the same result
namely:
id contract_id code_id units_alloc
91 64 54 80.00
But if I try to run this through my contracts_controller and view I get:
id contract_id code_id units_alloc
1 1 1 ---I think this record
comes from the @contract.codes.build
1 1 80.00 —I think this record
comes from the @contract.codelines.build(:units_alloc =>
params[:units_alloc],:contract => @contract)
Here are my models:
class Contract < AR::Base
has_many :codelines
has_many :codes, :through => :codelines
accepts_nested_attributes_for :codes
attr_accessible :codes_attributes,:codes,:authnum,:st_date,:end_date
end
class Codeline < AR::Base
belongs_to :contract
belongs_to :code
units_alloc … this is the attribute I would like to set
end
class Code < AR::Base
has_many :codelines
has_many :contracts, :through => :codelines
end
The new/create action of my app/controllers/contracts_controller.rb
def new
@contract = Contract.new
@contract.codes.build
@contract.codelines.build(:units_alloc =>
params[:units_alloc],:contract => @contract)
end
def create
@contract = Contract.new(params[:contract])
if @contract.save
flash[:success] = “New Contract has been saved”
redirect_to @contract
else
@title = “You have some errors”
render ‘new’
end
end
the partial for my view in app/views/contracts/_fields.html.haml
= f.fields_for :codes do |ff|
.field
= ff.label :name, "Code Name"
%br/
= ff.text_field :code_name
.field
.
.
= f.fields_for :codelines do |ff|
.field
= ff.label :name, "Units Alloc"
%br/
= ff.text_field :units_alloc
Can you please have a look at this and give me some direction?
Thanks.