私は次のクラスを持っています:
class Group < ActiveRecord::Base
has_many :users
belongs_to :leader, :foreign_key => "leader_id", :class_name => "User"
def get_leader!
if leader.try(:is_active?)
return leader
else
leader = users.active.sort_by { |u| u.completed_sessions }.last
save! # TODO: this does not save the new leader ... no idea why
return leader
end
end
end
get_leader! を呼び出すと、メソッドは常に正しいリーダーを返しますが、オブジェクトのforeign_key 'leader_id' の更新に失敗します。
私の実際のコード コメントからわかるように、その理由はわかりません。コンソールに移動してグループのリーダーを明示的に設定すると、すべてが正常に機能しているように見えます。
これがなぜなのか誰にもわかりますか?
(ちなみに、このメソッドの目的は、前のリーダーが非アクティブになったときにグループのリーダーを更新することです。新しいリーダーは、最も多くのログインを持つリーダーです。)