假设用户输入 - > #ruby #rails #flight
我正在尝试拆分主题标签列表并将其设置在我的标签表中,前提是标签不在表中。
def tag_list=(names)
self.tags = names.split("#").map do |n|
Tag.where(name: n.strip).first_or_create!
end
end
问题是它是否将空值设置为第一个标签 我如何使所有的标签小写,以及如何让它忽略空间,所以#cake #bake和#cake #bake一样。 非常感谢。
答案 0 :(得分:3)
>> "#ruby #rails #flight".scan /#([^#\s]+)/
=> [["ruby"],["rails"],["flight"]]
更严重:
String#scan
查找字符串中正则表达式的所有匹配项,并返回一个数组更简单的版本可以是:/#(\w+)/
,其中匹配的字符只是“单词”字符。
要将所有字符设为小写,请执行以下操作:
"#ruby #rails #flight".scan( /#(\w+)/ ).flatten.map( &:downcase )
答案 1 :(得分:0)
names.strip.split("#").compact.each do |tag|
tags << Tag.where(name: tag).first_or_create!
end