Ruby on rails 3 将块传递给。try()

Ruby on rails 3 将块传递给。try(),ruby-on-rails-3,Ruby On Rails 3,这个问题是关于在Rails3中使用.try()方法的(还有一点关于测试nil的最佳实践) 如果我有一个db对象,它可能是零,也可能不是零,它有一个字段,例如一个分隔字符串,由逗号和可选分号分隔,我想看看这个字符串是否包含一个特定的子字符串,那么我可以这样做: user_page = UserPage.find(id) if user_page != nil result = user_page.pagelist.gsub('\;', ',').split(",").include?(su

这个问题是关于在Rails3中使用.try()方法的(还有一点关于测试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”

我想使用重新编写此文件。请尝试,但找不到在pagelist之后应用这些内容的方法

因此,我尝试通过一个块(从这个链接)

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

我尝试了其他组合,尝试应用gsub etc部分,但没有效果

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


(我甚至不知道如何用一种易懂的方式表达这个问题!)

我想你可能弄错了-快速解决方案应该是在你的模型中添加一个方法:

def formatted_pagelist
  (pagelist || "").split(/[;,]/)
end
然后,您可以在任何地方使用它:

user_page.formatted_pagelist.include? sub

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

对其进行了更新,以确保它始终返回数组。:)也就是说。。。如果我想在其他地方的不同上下文中使用.try()方法,我尝试使用的正确语法是什么?您遇到的问题是,try不会在nil值上失败,而是在丢失消息时失败。由于
#pagelist
始终是一个有效的方法,因此它总是运行它,有时会返回nil,并将其传递给块。您的块可以修改为
t&&t.split(/[;,])。包括?(sub)
,尽管这已经开始有问题了。
user_page.formatted_pagelist.include? sub