2011-05-25 61 views
1
def current_user=(user) 
    @current_user = user 
end 

def user_from_remember_token 
    User.authenticate_with_salt(*remember_token) 
end 

def remember_token 
    cookies.signed[:remember_token] || [nil, nil] 
end 

1)我主要与def current_user =(user)混淆。什么是=。我发现它将用户对象作为参数,但=符号的重点是什么。引起混淆的方法语法

2)不知道为什么有*盈remember_token的。任何人都可以解释吗?

谢谢

回答

5

=在方法名的末尾是用于该分配一个值的方法一个语法糖。由于括号在Ruby中是可选的,因此您可以编写foo.current_user = (bar)foo.current_user = bar。请注意后者看起来更自然。另请注意,您可以使用attr_writer :current_user

您还可以在Ruby的方法名称中使用?!。按照惯例,前者表示要返回的布尔值,后者表示“危险的”方法(例如,修改对象而不是返回副本)。

*将传递给该方法的内容包装成数组。它也可以在调用方法时使用,然后解开数组。

||是简单的逻辑或;如果第一个操作数的计算结果为nilfalse,则另一个将返回。通常您可能会发现foo ||= "bar",这意味着foo将获得“bar”的值,除非它具有值(foo = foo || "bar")。

Ruby是一种伟大的语言,有很多这类怪癖。 Rubyist是值得一看的页面。

+0

TLDR版本'=''?''!'在ruby中的方法名称中都只是合法的字符。对他们没什么特别的。是什么时候使用它们的惯例更重要。 – madlep 2011-05-25 11:07:45

+0

可以在方法名称末尾使用'=','?'和'!'。当'irb'在声明一个名为'foo?bar'的方法时不会抱怨,它会记住这个方法是'foo?'。 – Sorrow 2011-05-25 11:18:12

+0

非常感谢,你真的回答了我的问题!仍习惯于使用红宝石。我已经听说过它的伟大的事情:) – BrianJakovich 2011-05-25 13:08:44

0

current_user之前的=号表示attr_writer方法。

这意味着

def current_user=(user) 
    @current_user = user 
end 

对于参考:

http://www.rubyist.net/~slagell/ruby/accessors.html  
http://apidock.com/ruby/Module/attr_writer 
http://ruby-doc.org/core/classes/Module.html 
1

current_user=(user)是一个二传手,让你做something.current_user = foo。该吸气剂根据将current_user,看起来像

def current_user 
    @current_user 
end