控制器呼叫
user = User.authenticate(params[:session][:email],
params[:session][:password])
在user.rb中验证方法
class << self
def authenticate(email, submitted_password)
user = find_by_email(email)
user && user.has_password?(submitted_password) ? user : nil
#return nil if user.nil?
#return user if user.has_password?(submitted_password)
end
end
我一直在看一些示例rails代码,我对此有点困惑。我知道它在用户对象上调用authenticate方法然后发送电子邮件和密码值,但是什么是:会话符号?我通过代码查找它,但我似乎无法弄明白。我没有看到名为session或者任何东西的方法。
此外,当用户实际使用该程序时,他们只给出电子邮件和密码的值,而不是会话。不确定它在做什么。
我问这个是因为它看起来像是某种“轨道通用练习”类型的东西。但是我可能错了,并没有提供足够的信息。如果我没有,请告诉我。
最后,Class&lt;&lt; self,那就是定义在该类中创建User对象是否正确?
提前感谢您的帮助! (另外我知道主持人会编辑这个以修复我的代码块,如果你们可以告诉我我做错了什么以及如何修复它,我会很感激!)
答案 0 :(得分:1)
好吧,那里有大约50个不同的问题,但让我们看看我们如何去。
首先:params
方法返回控制器操作收到的参数列表。这些通常(99%)由请求发送,但也可以由中间件设置。这两个参数params[:session][:email]
和params[:session][:password]
都是这样的,因为在页面上你已经定义了一个像这样的text_field(我猜):
<%= text_field "session", "email" %>
此方法的第一个参数告诉Rails要操作的对象,即@session
(或@user_session
)对象(与您可能看到的session
对象不同在控制器中)。第二个参数为此字段提供了一个特殊的唯一名称。在这种情况下,它是email
。因为它是这样定义的,所以它将作为params[:session][:email]
传递回控制器而不仅仅是params[:email]
。它以这种方式完成,这样您就可以区分不同的字段,这些字段可能会发回类似命名的值。
应该回答session
的内容。 :session
“东西”本身实际上是一个符号。如果你done some reading about Ruby,你会知道它们是什么。
最后:class << self
'特殊酱'实际上是为它所在的类定义一个类级方法。你也可以这样做来定义它:
def self.authenticate(arguments)
# code goes here
end
有些人更喜欢class << self
,因为它允许您将类方法分组到它们的大块中,但其他人更喜欢def self.method
的明确陈述(甚至有些人做def SomeClass.method
!不要听他们......)。这取决于你在这里选择的路径。
好吧,所以我对50个问题的估计有点偏差(48分),但我认为这可以帮助你理解一些事情。如果您仍然感到困惑,请去看医生或阅读a Rails book。
答案 1 :(得分:-1)
关于“class&lt;&lt; self”的讨论,请转到there