如何在RoR中搜索记录?

时间:2009-12-27 07:31:50

标签: ruby-on-rails

我知道我可以使用查询语言来查找我想要的记录。我正在做一个登录页面,我想找到与用户名和密码匹配的记录,但我不想循环所有元素来找出我想要的用户(<%@ users.each do | user |%>),除了输入SQL,我应该在RoR中执行wt。

3 个答案:

答案 0 :(得分:3)

或许:

User.first(:conditions => {:login => 'ted', :password => 'secret'})
# returns nil for no match and first match for a good record 
# make sure there is a unique index on login 

对于身份验证,我强烈建议authlogicrailscast

答案 1 :(得分:3)

您可以使用动态查找程序按用户名和密码查找用户:

@user = User.find_by_user_name_and_password('scott', 'tiger')

答案 2 :(得分:0)

虽然Sam和Chandra提供的其他答案在技术上是正确的,但两种解决方案都暗示密码以纯文本形式存储 - 这是非常坏主意。如果有人不能访问您的数据库,他们将拥有一整套用户名(以及可能的电子邮件地址),以及所有密码。

相反,请考虑使用算法确保您的密码在数据库中加密,例如bcrypt。你需要bcrypt-rub gem才能使用它。

您还应该考虑完全忽略查询中的密码。这是一种很好的做法,因为它提供了额外的安全性; SQL注入变得更难执行。如果用户具有唯一的用户名,则只需提取用户名即可返回相同的对象,之后您可以检查密码是否正确:

@user = User.find_by_username(params[:username])
if @user.password == params[:password]
  # do something
else
  # do something else
end

理想情况下,您应该使用bcrypt并从查询中省略密码。如何执行此操作在GitHub上的bcrypt-ruby自述文件(我提供的链接)中有所描述。