Получить текущего пользователя в фильтре after_create - PullRequest
1 голос
/ 27 февраля 2012

Я знаю, что это плохая идея, чтобы получить current_user в модели.Я также знаю, что есть способ сделать это (с помощью Thread).Но я не хочу делать это таким образом (это, безусловно, плохая идея), поэтому я хотел бы иметь мнение о том, как добиться этого другим путем.

Пользователь может создать клансоздавая его, он должен быть лидером.Модель клана:

class Clan < ActiveRecord::Base
    after_create :assign_leader

    # the person who created the clan is the leader
    def assign_leader
      self.clan_memberships << ClanMembership.new(:user_id => ???, :role => 'leader')
    end
end

Я знаю, что могу просто создать членство в контроллере.Однако мне нравится, что фильтры действуют как транзакции, и я бы очень предпочел фильтр для этого.Но есть ли действительно правильный, не «хакерский» способ сделать это здесь?

1 Ответ

4 голосов
/ 27 февраля 2012

Назначить лидера в контроллере:

@clan.leader = @clan
@clan.save

Тогда ваша модель будет выглядеть так:

class Clan < ActiveRecord::Base
  belongs_to :leader
  after_create :assign_leader

# the person who created the clan is the leader
def assign_leader
  self.clan_memberships.create(:user => self.leader)
end

Это означает, что тогда вы можете проверить clan.leader на лидера, вместо того, чтобы запрашивать другую ассоциацию, такую ​​как clan.memberships, чтобы выяснить, кто это. Это также приводит к более чистому коду в assign_leader.

Вам, конечно, нужно будет добавить leader_id в качестве поля к таблице clans.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...