使用正则表达式像标签一样保存 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('#')