2012-08-08 5 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 просто строит запись не сохраняет его.

В изменении наблюдателя 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 

также вы должны иметь свой регистр наблюдателя в конфиге чтобы он слушал деятельность

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

+0

что-то еще, потому что я избавился от 'если army.siege' и попробовал оба из них, и он до сих пор не получает создан. Я также попытался сделать «attr_accessible: army_id», но ничего хорошего. – LearningRoR

+0

Вы проверили, является ли вызов, достигающий наблюдателя? – PriteshJ

+0

Нет, похоже, это совсем не так. – LearningRoR

Смежные вопросы