我试图创建一个帮助器,找到任何以#后面开头的数字,然后删除#,然后将其转换为链接。
但是,我并不完全确定我做错了什么,现在评论显得空白。
我该如何正确地做到这一点?
到目前为止,我有:
textarea
在我看来:
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) %>
,并将其设置为pid
。
我想做的是:
匹配maximum pid + 1
,删除#123
如果匹配任何#
获取Post.pid
,请将post.board_id
替换为#123
。
elsif如果匹配任何Reply.pid获取link_to #123, board_id/123
和reply.post_id
。将{123替换为reply.board_id
。
其他只是放link_to #123, board_id/post_id#123
。
我最终使用的代码:
#123
答案 0 :(得分:1)
这应该接近你想要做的事情:
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
与块一起使用,以便您可以很好地控制要替换的内容,因此link_to
应包含您期望的链接。