0

チェックボックスをオンにすると、Engineer という子リソースを作成できるようになります。メソッドを呼び出すことができる場所であるため、モデルを介して作成しようとしていますafter_save

これが私のコードです:

models/user.rb

class User < ActiveRecord::Base
  has_many :armies
  has_many :engineers  
end

models/army.rb

class Army < ActiveRecord::Base
 has_many :engineers
 attr_reader :siege
 after_save :if_siege
 private

 def if_siege
   if self.siege
    Engineer.create!( :user_id => current_user.id, :army_id => self.id )
   end
 end
end

models/engineer.rb

class Engineer < ActiveRecord::Base
  belongs_to :user
  belongs_to :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

これは私のif_siege方法ではエラーになります:

undefined local variable or method `current_user'

どうすればこれを修正できますか、またはこれを行う別の方法はありますか? これをコントローラーに入れるかモデルに入れるかはわかりませんが、これをモデルに入れることしかできません。

ありがとう。

4

2 に答える 2