0

这个问题是关于在 rails 3 中使用 .try() 方法(以及一些关于测试 nil 的最佳实践)

如果我有一个可能为 nil 也可能不是 nil 的 db 对象,并且它有一个字段,例如分隔字符串,用逗号和可选的分号分隔,并且我想查看该字符串是否包含特定的子字符串,那么我可能会这样做:

user_page = UserPage.find(id)
if user_page != nil
    result = user_page.pagelist.gsub('\;', ',').split(",").include?(sub)
end

因此,例如 user_page.pagelist == "item_a,item_b;item_c"

我想用 .try 重写它,但找不到在 pagelist 之后应用这些东西的方法

所以我尝试传递一个块(来自这个链接http://apidock.com/rails/Object/try

user_page.try(:pagelist) {|t| t.gsub('\;', ',').split(",").include?(sub)} 

但是,该块被简单地忽略,返回的结果只是 pagelist

我尝试过尝试应用 gsub 等部分的其他组合,但无济于事

如何将其他方法应用于“尝试”的方法?

(我什至不知道如何以可理解的方式表达这个问题!)

4

1 回答 1

1

我认为您可能错了 - 快速解决方案应该是向您的模型添加一个方法:

def formatted_pagelist
  (pagelist || "").split(/[;,]/)
end

然后你可以在任何地方使用它:

user_page.formatted_pagelist.include? sub

严格来说,我会说这是一个装饰器。如果您没有在应用程序中使用装饰器模式(查看draper!),那么模型方法应该可以正常工作。

于 2013-07-10T21:13:57.780 回答