I’m trying to have an Engineer be created by a checkbox in the Army form but it doesn’t get created. The name of the checkbox is siege and is part of my Army model:
models/army.rb
class Army < ActiveRecord::Base
attr_accessible :siege
attr_reader :siege
validates_inclusion_of :siege, :in => [true, false]
has_many :engineers
def siege=(string_value)
@siege = (string_value == '1')
end
end
models/engineer.rb
class Engineer < ActiveRecord::Base
belongs_to :user
belongs_to :army
end
armies/new.html.erb
<%= form_for @army do |f| %>
<%= f.check_box :siege %>
<%= f.submit "Create Army" %>
<% end %>
controllers/armies_controller.rb
def new
@army = Army.new
end
def create
@army = current_user.armies.build(params[:army])
if @army.save
redirect_to new_army_path
else
render :new
end
end
end
models/army_observer.rb
class ArmyObserver < ActiveRecord::Observer
def after_save(army)
if army.siege
Engineer.new({ :user_id => current_user.id, :army_id => :army_id })
end
end
end
The army gets created but the Engineer does not. What needs to be corrected in my code to enable this?
You are not saving the record after initialing it 🙂
.newjust builds a record does not save it.In observer change
newtocreate!to
or else save it after building the record
also you need to have your observer register in config to make it listen to activities
http://guides.rubyonrails.org/active_record_validations_callbacks.html#registering-observers