我知道在模型中获取current_user是个坏主意。我也知道有办法(使用Thread)。但是,我不想这样做(这当然是一个坏主意),所以我想对以不同的方式实现这一点有意见。
用户可以创建一个战队,在创建战队时,他必须是领导者。 Clan模型是:
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
我知道我可以在控制器中创建成员资格。但是,我喜欢过滤器充当交易,我更喜欢这个过滤器。但是,在这里真的有一种正确的,非“黑客”的做法吗?
答案 0 :(得分:4)
分配控制器中的领导者:
@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
表中。