オブザーバーの使用に関するいくつかの質問を見てcurrent_user
、その1つが言ったことを実装しようとしましたが、機能しませんでした(ここを参照)。
チェックボックスがtrueとマークされているときに、オブザーバーによってエンジニアを作成しようとしています。エンジニアと軍隊はユーザーに属しています。
models / user.rb
class User < ActiveRecord::Base
cattr_accessor :current
has_many :armies
has_many :engineers
end
controllers / application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_time_zone, :set_current_user
private
def set_current_user
User.current = current_user
end
end
models / army_observer.rb
class ArmyObserver < ActiveRecord::Observer
def after_save(army)
if army.siege
Engineer.create({ :user_id => current_user.id, :army_id => :army_id })
end
end
end
このコードでは、エラーが発生します。
undefined local variable or method `current_user' for #<ArmyObserver:0x4e68970>
その他の方法で?たぶん、Devise current_userメソッドと競合していますか?たぶんcurrent_user
、コントローラーに保持する方が良いですか?もしそうなら、私はそれをどのように行いますか?
まだ学んでいる初心者に感謝します。