Ruby on rails 3 将块传递给。try()
这个问题是关于在Rails3中使用.try()方法的(还有一点关于测试nil的最佳实践) 如果我有一个db对象,它可能是零,也可能不是零,它有一个字段,例如一个分隔字符串,由逗号和可选分号分隔,我想看看这个字符串是否包含一个特定的子字符串,那么我可以这样做: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
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