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