Rails 4 - 查找相关用户

时间:2015-08-11 19:42:45

标签: ruby-on-rails ruby-on-rails-4

任务:在登录后立即显示员工的个人资料。

问题:

class WelcomeController < ApplicationController
  def index
    @employee = Employee.find_by_email(params[@current_user.email])
  end
end

我尝试以多种方式编写代码,将当前用户的电子邮件与员工表中的相应详细信息相关联,并且我能得到的最远的信息是: enter image description here 我确信我在索引内的这一行写错了,但我正在研究,我发现并尝试的所有事情都没有让员工与当前用户相关。

5 个答案:

答案 0 :(得分:1)

尝试使用此代码:

class WelcomeController < ApplicationController
  def index
    @employee = Employee.where(email: current_user.email).first
  end
end

使用Devise时,当前用户是一个实例变量,因此您不需要在其前面添加@。

如果您要拥有大量用户,最好在数据库中为电子邮件列创建索引。

答案 1 :(得分:0)

我喜欢kjmagic13的回答。使用

@current_user.id

它从数据库中提取与用户相关的所有信息

Mori的答案也很好。

答案 2 :(得分:0)

日志中的以下SQL行对应于Employee.find_by_email调用:

SELECT "employees".* FROM "employees" WHERE "employees"."email" IS NULL LIMIT 1

正如Mori所指出的,这意味着您通过nil电子邮件找到了员工,这意味着params[@current_user.email]nil。由于您没有参数,因此无论如何都不需要引用params哈希。您应该只参考@current_user.email

Employee.find_by_email @current_user.email

答案 3 :(得分:0)

正如Mori的回答所说,你可能并不打算将@ current_user.email用作params的哈希键。我认为您正在尝试通过电子邮件(而不是通过作为参数提交的电子邮件)查找当前用户的员工记录,如此(也避免弃用find_by_ *帮助程序):

@employee = Employee.find_by(email: @current_user.email)

我认为您不想尝试Employee.find(@current_user.id) - 只是要查找其id与current_user的ID匹配的员工 - 除非员工和用户使用同样的表格没有意义

答案 4 :(得分:-1)

为什么不通过ID找到? find_by_*已经过时了。

@employee = Employee.find(@current_user.id)