尝试在我的标签表中设置主题标签列表

时间:2013-09-26 17:31:29

标签: ruby-on-rails ruby ruby-on-rails-3 hashtag

假设用户输入 - > #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一样。 非常感谢。

2 个答案:

答案 0 :(得分:3)

正面的力量,救援! (提示英雄姿势)

>> "#ruby #rail­s #flig­ht".scan /#([^­#\s]+)/
=>  [["ruby"],["rails"],["flight"]]

更严重:

  • String#scan查找字符串中正则表达式的所有匹配项,并返回一个数组
  • 在正则表达式中,我们有:
    • 匹配#character,
    • 打开一个捕获组(这就是为什么我们有一个数组数组),
    • 匹配一个或多个既不是#也不是空格的字符,
    • 关闭捕获组。

更简单的版本可以是:/#(\w+)/,其中匹配的字符只是“单词”字符。

要将所有字符设为小写,请执行以下操作:

"#ruby #rail­s #flig­ht".scan( /#(\w+)/ ).flatten.map( &:downcase )

答案 1 :(得分:0)

names.strip.split("#").compact.each do |tag|
  tags << Tag.where(name: tag).first_or_create!
end