我试图让一个工程师在陆军表格中被一个复选框创建,但是它没有被创建。复选框的名称是siege,是我的Army模型的一部分:
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
endmodels/engineer.rb
class Engineer < ActiveRecord::Base
belongs_to :user
belongs_to :army
endarmies/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
endmodels/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军队是建立起来的,但工程师却没有。在我的代码中需要修正什么才能启用这个功能?
发布于 2012-08-08 10:23:10
在初始化记录后,您不会保存它:)
.new只是构建一个记录,而不是保存它。
在观察者中将new更改为create!
Engineer.new({ :user_id => current_user.id, :army_id => :army_id })至
Engineer.create({ :user_id => current_user.id, :army_id => :army_id })或者在创建记录之后保存它。
engineer= Engineer.new({ :user_id => current_user.id, :army_id => :army_id })
engneer.save此外,您还需要在配置中有您的观察者寄存器,以使它能够侦听活动。
callbacks.html#registering-observers
https://stackoverflow.com/questions/11862112
复制相似问题