我已经阅读了有关此主题的几个SO链接。即使你可以破解它来获取模型中的current_user,你也不应该这样做。那么,在我的案例中,我的选择是什么?
我正在使用devise_invitable gem,其中一个命令是User.invite!({:email => email}, current_user)
,它存储用户被邀请的人(current_user
)。我想得到这些信息。
目前,系统会邀请用户加入私人群组,此流程将在我的group.rb
模式中处理:
# group.rb
def user_emails
end
def user_emails=(emails_string)
emails_string = emails_string.split(%r{,\s*})
emails_string.each do |email|
user = User.find_for_authentication(email: email)
if user
self.add user
GroupMailer.welcome_email(user)
else
User.invite!(email: email) # But I want this: User.invite!({:email => email}, current_user)
user = User.order('created_at ASC').last
self.add user
end
end
end
如果相关,它只是一个text_area接收要处理的电子邮件:
# groups/_form.html.erb
<%= f.text_area :user_emails, rows: 4, placeholder: 'Enter email addresses here, separated by comma', class: 'form-control' %>
如果不必重新安排太多,我如何在此过程中运行User.invite!({:email => email}, current_user)
,以便这些有用的信息(由谁邀请)存储在我的数据库中?非常感谢!
更新:
在@ Mohamad的帮助下,我得到了它的工作。
# group.rb
def emails
end
def invite_many(emails, inviter)
emails.split(%r{,\s*}).each do |email|
if user = User.find_for_authentication(email: email)
add user
GroupMailer.group_invite user
else
add User.invite!({:email => email}, inviter)
end
end
end
# groups_controller.rb
def update
@group = Group.friendly.find(params[:id])
if @group.update_attributes(group_params)
emails = params[:group][:emails]
@group.invite_many(emails, current_user) # also put this in #create
redirect_to @group
else
flash[:error] = "Error saving group. Please try again."
render :edit
end
end
然后在我的用户模型中没有任何内容,因为User.invite已经由devise_invitable定义,我不需要做任何其他事情。这个过程现在很有效!
答案 0 :(得分:-2)
您可以存储具有全局范围的current_user,例如@ current_user,可以在会话控制器中分配,因此在模型中,您只需@current_user作为应用的当前用户。