log_in(用户) 与 log_in 用户相同吗?

is log_in(user) the same as log_in user?

正在学习 Hartl 的 Rails 教程,chapter 8.2.1

我们定义:

def log_in(user)
   session[:user_id] = user_id
end

然后我们在控制器中调用log_in方法:

def create
   user = User.find_by(email: params[:session][:email].downcase)
   if user && user.authenticate(params[:session][:password])
     log_in user
     redirect_to user
   else
     flash.now[:danger] = 'Invalid email/password combination'
     render 'new'
   end
 end

为什么我们在控制器中写log_in user而不是log_in(user)?它们是等效的语法吗?谢谢

是的。

作为 ruby 语法糖的一部分,您可以在方法调用时去掉括号

例如,假设您有一个接受散列的方法

您可以通过以下任一方式调用它:

method_name({param1: 1, param2: 2})
method_name(param1: 1, param2: 2)
method_name param1: 1, param2: 2

什么时候用哪个?视情况而定。

如果你想嵌套方法调用,最好是冗长的。如果您需要传递多个哈希值,则需要使用 {} 括号告诉 ruby 它们的边界。