gpt4 book ai didi

ruby-on-rails - `new` 关键字在此 Ruby 方法定义中如何工作?

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:41 24 4
gpt4 key购买 nike

Railscasts 发布了一个关于重构的精彩片段。一种方法是将复杂的 Controller 逻辑移动到服务对象中,而不是将其下推到模型中。在 one service object ,使用了以下代码:

class PasswordReset
attr_reader :user

def self.from_email(email)
new User.find_by_email(email)
end

def self.from_token(token)
new User.find_by_password_reset_token!(token)
end
...
end

new 关键字在两个方法体中起什么作用? 新的 User.find_by_。这与 User.find_by_ 有何不同?

调用代码如下:

  def create # controller
password_reset = PasswordReset.from_email(params[:email])
if password_reset.user
password_reset.send_email
redirect_to root_url, notice: "Email sent with password reset instructions."
else
redirect_to new_password_reset_url, alert: "Email address does not match a user account."
end
end

此外,为什么需要 attr_reader :user

最佳答案

类名隐含在 self 方法中。代码可以这样写:

 def self.from_email(email)
PasswordReset.new User.find_by_email(email)
end

为了回答问题的第二部分,attr_reader 定义了一个实例变量和一个读取器方法(如果您来自 java 或 c#,则称为 getter 方法)。把它们放在一起,你可以把它写成:

class PasswordReset


def user
@user
end

def self.from_email(email)
PasswordReset.new User.find_by_email(email)
end

def self.from_token(token)
PasswordReset.new User.find_by_password_reset_token!(token)
end
...
end

这是假设 PasswordReset#initialize 将用户作为参数,并相应地设置@user

关于ruby-on-rails - `new` 关键字在此 Ruby 方法定义中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15745397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com