チェックボックスをオンにすると、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'
どうすればこれを修正できますか、またはこれを行う別の方法はありますか? これをコントローラーに入れるかモデルに入れるかはわかりませんが、これをモデルに入れることしかできません。
ありがとう。