使用正则表达式像标签一样保存 Twitter Rails
Saving Twitter Like Hashtags with Regex Rails
感谢您的帮助!
我正在尝试在我的 rails 应用程序中像标签一样保存 Twitter。用户输入带有#hashtag 符号的标签。但是,它一直保存空字符串。我添加了一个额外的 unless 语句来对抗它,但现在它不保存任何标签。
代码:
def tag_list=(names)
self.tags = names.split(/\B#\w+/).map do |n|
unless n.strip == "" || n.strip == nil
Tag.where(name: n.strip).first_or_create!
end
end
end
我还尝试了以下正则表达式,它也 return 相同:
/\B#\w+/
/(?:^|\s)(?:(?:#\d+?)|(#\w+?))\s/i
/(?:\s|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|$)/i
您的第一个正则表达式完全有效,但您必须使用 scan
而不是 split
,因此分配标签的代码将是:
def tag_list=(names)
self.tags = names.scan(/\B#\w+/).map do |tag|
Tag.find_or_initialize_by(name: tag.remove('#'))
end
save!
end
变化是:
- 使用
scan
- 使用
find_or_initialize_by
而不是 where
然后 first_or_create!
- 最后用
save!
保存一次
- 如果您想保存带有
#
前缀的主题标签,您可能不需要 tag.remove('#')
感谢您的帮助! 我正在尝试在我的 rails 应用程序中像标签一样保存 Twitter。用户输入带有#hashtag 符号的标签。但是,它一直保存空字符串。我添加了一个额外的 unless 语句来对抗它,但现在它不保存任何标签。 代码:
def tag_list=(names)
self.tags = names.split(/\B#\w+/).map do |n|
unless n.strip == "" || n.strip == nil
Tag.where(name: n.strip).first_or_create!
end
end
end
我还尝试了以下正则表达式,它也 return 相同:
/\B#\w+/
/(?:^|\s)(?:(?:#\d+?)|(#\w+?))\s/i
/(?:\s|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|$)/i
您的第一个正则表达式完全有效,但您必须使用 scan
而不是 split
,因此分配标签的代码将是:
def tag_list=(names)
self.tags = names.scan(/\B#\w+/).map do |tag|
Tag.find_or_initialize_by(name: tag.remove('#'))
end
save!
end
变化是:
- 使用
scan
- 使用
find_or_initialize_by
而不是where
然后first_or_create!
- 最后用
save!
保存一次 - 如果您想保存带有
#
前缀的主题标签,您可能不需要tag.remove('#')