可能是一个愚蠢的问题,但我跟着this article并且遇到了一些我无法理解的代码。这是:
class CreateArticle
attr_reader :validate_article, :persist_article
def initialize(validate_article, persist_article)
@validate_article = validate_article
@persist_article = persist_article
end
def call(params)
result = validate_article.call(params)
if result.success?
persist_article.call(params)
end
end
end
更具体地说,有问题的一行是:
if result.success?
这是我的问题:success?
方法来自哪里?它不是Ruby中的默认值,result
是一个局部变量,所以它应该在附近。但即使它在代码示例中被省略,在哪里必须定义该行才能工作?我试图定义的每个地方都给了我一个未定义的方法'错误。
例如,我试图在CreateArticle
类和(仅提到)ValidateArticle
类中定义它,明显的罪魁祸首,但没有骰子。
更新
我问的原因不在于success?
的作用,因为我对在我的代码中使用模式感兴趣。因此,例如,我的success?
方法版本可能只是检查值是否已更新,或者是否已将项插入到数组中。例如,让我们说它就是这样:
def success? # or self.success?
return true
end
问题是,我找不到可以放这个有用的地方。我甚至为它创建了一个模块,include
将它放入课堂中,但它仍然无法工作(它只返回未定义的方法')。所以我仍然不知道我必须在哪里定义这样一个方法,以便它能够像它应该的那样工作。
答案 0 :(得分:1)
实际上. success?
是内置的ruby方法。检查 here。它实际上做的是检查Stat并返回一个布尔值。
答案 1 :(得分:1)
这是rails附带的一种方法。它检查具有200代码的服务器响应。如果它获得200代码则返回true,否则返回false。阅读有关它的rails API文档... https://apidock.com/rails/v3.2.3/ActiveResource/Response/success%3F
答案 2 :(得分:0)
我在博客上做了更多的挖掘,从我发现我怀疑代码可能正在使用dry-monads gem:
您可以通过在monadic值上调用
failure?
或success?
来明确检查类型。
它在代码摘录中并不明确,但它是唯一有意义的东西。