Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 正在尝试在“我的标记”表中设置哈希标记列表_Ruby On Rails_Ruby_Ruby On Rails 3_Hashtag - Fatal编程技术网

Ruby on rails 正在尝试在“我的标记”表中设置哈希标记列表

Ruby on rails 正在尝试在“我的标记”表中设置哈希标记列表,ruby-on-rails,ruby,ruby-on-rails-3,hashtag,Ruby On Rails,Ruby,Ruby On Rails 3,Hashtag,假设一个用户输入->ruby>rails>flight 我正在尝试拆分hashtags列表,并将其设置在我的tags表中,前提是该标记尚未在表中 def tag_list=(names) self.tags = names.split("#").map do |n| Tag.where(name: n.strip).first_or_create! end end 问题是它将空值设置为第一个标记。 如何使所有的标签小写,以及如何使其忽略空格,以便“蛋糕”烘焙和“蛋糕

假设一个用户输入->ruby>rails>flight
我正在尝试拆分hashtags列表,并将其设置在我的tags表中,前提是该标记尚未在表中

def tag_list=(names)
    self.tags = names.split("#").map do |n|
      Tag.where(name: n.strip).first_or_create!
    end
end
问题是它将空值设置为第一个标记。
如何使所有的标签小写,以及如何使其忽略空格,以便“蛋糕”烘焙和“蛋糕”烘焙一样有效。
非常感谢。

regexp的强大功能,为您的救援!(提示英雄姿势)

更严重的是:

  • String#scan
    查找字符串中regexp的所有匹配项,并返回一个数组
  • 在regexp中,我们有:
    • 匹配#字符
    • 打开一个捕获组(这就是为什么我们有一系列阵列)
    • 匹配一个或多个既不是a#也不是空格的字符
    • 关闭捕获组
更简单的版本可以是:
/#(\w+)/
,其中匹配的字符仅为“word”字符

要使所有字符都小写,只需执行以下操作:

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

regexp的力量,拯救我们!(提示英雄姿势)

更严重的是:

  • String#scan
    查找字符串中regexp的所有匹配项,并返回一个数组
  • 在regexp中,我们有:
    • 匹配#字符
    • 打开一个捕获组(这就是为什么我们有一系列阵列)
    • 匹配一个或多个既不是a#也不是空格的字符
    • 关闭捕获组
更简单的版本可以是:
/#(\w+)/
,其中匹配的字符仅为“word”字符

要使所有字符都小写,只需执行以下操作:

"#ruby #rail­s #flig­ht".scan( /#(\w+)/ ).flatten.map( &:downcase )
names.strip.split(“#”).compact.each do|标记|
标签
names.strip.split(#“).compact.each do|标签|

该死!我真的需要学习这个正则表达式。谢谢我现在就试试。为了提高精度,输出必须平坦,因为捕获组生成数组。如果你想练习regexp,我建议你亲自动手,而且很明显,你可以阅读.Worked as a dream。谢谢!谢谢你的链接,我需要在regex上升级我的游戏。该死!我真的需要学习这个正则表达式。谢谢我现在就试试。为了提高精度,输出必须平坦,因为捕获组生成数组。如果你想练习regexp,我建议你亲自动手,而且很明显,你可以阅读.Worked as a dream。谢谢!谢谢你的链接,我需要在regex上升级我的游戏。
names.strip.split("#").compact.each do |tag|
  tags << Tag.where(name: tag).first_or_create!
end