2012-08-08 67 views
0

我試圖讓工程師通過軍隊形式的複選框創建,但它不會被創建。複選框的名稱爲siege,是我Army模型的一部分:通過複選框創建關聯的資源

型號/ 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 

型號/ engineer.rb

class Engineer < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :army 
end 

軍隊/ new.html.erb

<%= form_for @army do |f| %> 
    <%= f.check_box :siege %> 
    <%= f.submit "Create Army" %> 
<% end %> 

控制器/ 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 

型號/ 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 

軍隊被創建,但工程師卻沒有。我的代碼中需要更正哪些內容才能啓用此功能?

回答

1

你是不是保存記錄草簽之後:)

.new只是構建了一個記錄不保存它。

在觀察者改變newcreate!

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 

你也必須配置您的觀察員寄存器使其聽取活動

http://guides.rubyonrails.org/active_record_validations_callbacks.html#registering-observers

+0

別的東西,因爲我擺脫了'如果army.siege'和嘗試這兩種,它仍然還沒有生成。我也嘗試使'attr_accessible:army_id',但沒有好處。 – LearningRoR 2012-08-08 10:55:39

+0

你檢查過,是否接到觀察者的電話? – PriteshJ 2012-08-08 10:56:27

+0

不,它似乎沒有。 – LearningRoR 2012-08-08 10:59:45