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 =(用户)混淆。什么是= for。我看到它将用户对象作为参数,但=符号的重点是什么。
2)不确定为什么在remember_token前面有 * 。谁能解释一下呢?
谢谢
答案 0 :(得分:5)
方法名称末尾的=
是用于分配值的方法的语法糖。由于括号在Ruby中是可选的,因此您可以编写foo.current_user = (bar)
或foo.current_user = bar
。请注意,后者看起来更自然。另请注意,您可以使用attr_writer :current_user
。
您还可以在Ruby中的方法名称中使用?
和!
。按照惯例,前者表示要返回的布尔值,后者表示“危险”方法(例如,修改对象而不是返回副本)。
*
将传递给方法的内容包装到数组中。它在调用方法时也有效,然后解包数组。
||
只是逻辑或;如果第一个操作数计算为nil
或false
,则返回另一个操作数。通常您会发现foo ||= "bar"
,这意味着foo
将获得“bar”的值,除非它具有值(foo = foo || "bar"
)。
Ruby是一种很好的语言,有很多这样的怪癖。 Rubyist是一个值得访问的页面。
答案 1 :(得分:1)
current_user=(user)
是一个允许您执行something.current_user = foo
的setter。相应的getter将是current_user
,看起来像
def current_user
@current_user
end
答案 2 :(得分: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