Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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_Regex - Fatal编程技术网

Ruby on rails 从注释创建指向使用正则表达式的链接

Ruby on rails 从注释创建指向使用正则表达式的链接,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我正在尝试创建一个帮助器,它可以查找以#开头的任何东西,这些东西后面的数字用空格分隔,然后删除#,并将其转换为链接 然而,我不完全确定我做错了什么,现在评论似乎是空白的 如何才能正确地执行此操作 到目前为止,我已经: module ApplicationHelper def linkhelper (comment) link = comment.to_s.gsub (/a?#\d.*\d/) if Post.friendly.exists?(@link)

我正在尝试创建一个帮助器,它可以查找以#开头的任何东西,这些东西后面的数字用空格分隔,然后删除#,并将其转换为链接

然而,我不完全确定我做错了什么,现在评论似乎是空白的

如何才能正确地执行此操作

到目前为止,我已经:

module ApplicationHelper
    def linkhelper (comment)
        link = comment.to_s.gsub (/a?#\d.*\d/)
        if Post.friendly.exists?(@link)
            boardid = self.board_id
            postid = link
            link_to "#link", boardid.postid, :anchor => link
        elsif Reply.exists?(:pid => @link)
            boardid = self.board_id
            postid = reply.link.post_id
            link_to '#link', boardid.postid, :anchor => link
        else '#link'
        end
    end
end
我认为:

<% linkhelper(post.comment) %>

这应该接近于您正在尝试的操作:

def linkhelper(comment)
  link = comment.to_s.gsub (/#(\d+)\s+/) do |match|
    slug = $1.strip
    if (post = Post.friendly.find_by(id: slug))
      link_to "##{slug}", "#{post.board_id}/#{slug}"
    elsif (reply = Reply.friendly.find_by(pid: slug.to_i))
      link_to "##{slug}", "#{reply.board_id}/#{reply.post_id}##{slug}"
    else
      "##{slug}"
    end
  end
end

这使用带有块的
gsub
,允许您对替换的内容进行很好的控制,因此到
链接应该包含您期望的链接。

什么是
post.link.exists?
应该做什么?另外,为什么您的方法同时具有
post
@post
?您可以发布完整的堆栈跟踪吗?我猜post或reply实际上是一个集合,但我需要查看更多代码。@Daveshweisguth抱歉,我用固定代码更新了我的问题。您在“link”上调用gsub,需要两个参数,或者它返回一个枚举数。而且你的正则表达式对于你描述的是错误的。您正在寻找类似
.gsub(/a#([\d\s]+)/,'\1')
的内容。那么你所说的链接是什么意思?你想做变量插值吗?这段代码有很多错误。@Michaelpaple你是对的,我真的不知道我在做什么。这可能是一种完全错误的方法。通过#link,我试图按照用户输入的内容提供link#to,但这显然不是正确的方法。我尝试了这段代码,似乎正则表达式找不到它,所以我切换到使用
/^.$/
进行测试。这会找到它,但会返回
else
语句。最后,我对正则表达式使用了/#(\d+)/,再加上一些其他的小改动,这就行了。但是我还是不能让锚工作?你看到锚有什么作用?我刚刚在回复
链接到
的路径中用一个显式锚更新了答案。也许这样会更好?好主意,行得通。我还编辑了我的问题,以显示我正在使用的最终代码。
def linkhelper(comment)
  link = comment.to_s.gsub (/#(\d+)\s+/) do |match|
    slug = $1.strip
    if (post = Post.friendly.find_by(id: slug))
      link_to "##{slug}", "#{post.board_id}/#{slug}"
    elsif (reply = Reply.friendly.find_by(pid: slug.to_i))
      link_to "##{slug}", "#{reply.board_id}/#{reply.post_id}##{slug}"
    else
      "##{slug}"
    end
  end
end