abb*_*567 2 javascript ruby replace ruby-on-rails hashtag
我试图将主题标签转换为微博中的链接.我已经实现了一个名为simple_hashtag的gem,它似乎适用于链接方面.但是,gem通过从帖子中提取主题标签并在自己的循环中显示它们来工作.所以,例如,如果我的Micropost是:
Today I went #snowboarding, it was #awesome
Run Code Online (Sandbox Code Playgroud)
提取标签的代码是作为循环完成的,这意味着它必须在内容之外完成.
<p><%= micropost.content %></p>
<ul>
<% micropost.hashtags.each do |hashtag| %>
<li><%= link_to hashtag.name, hashtag_path(hashtag.name) %></li>
<% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)
这使完成的视图看起来像:
Today I went #snowboarding, it was #awesome
- snowboarding
- awesome
Run Code Online (Sandbox Code Playgroud)
是否可以让代码扫描内容并用链接替换主题标签?我想知道是否有办法收集主题标签,将它们转换为链接,然后在内容中替换它们?
我知道我可以使用以下内容扫描内容并找到哈希值:
<% content = micropost.content %>
<% hashes = content.scan(/#\w+/) %>
<% hashes.each do |hash| %>
<%= hash %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
然后,我想使用类似hash.gsub!甚至是Javascript的东西,用链接替换内容中的主题标签,而不是将它们列在下面.
我会使用正则表达式,而不是拆分和加入文本
def render_with_hashtags(text)
text.gsub(/(?:#(\w+))/) {hashtag_link($1)}
end
def hashtag_link(hash)
link_to "##{hash}", hashtag_path(hash)
end
Run Code Online (Sandbox Code Playgroud)
如果需要,可以html_safe在方法内添加.
您可以为此使用帮助程序,例如:
<%= render_with_hashtags(micropost.content) %>
Run Code Online (Sandbox Code Playgroud)
在您看来,代码如下:
class MicropostHelper
def render_with_hashtags(content)
content_words = content.split(" ")
content_with_links = content_words.map do |word|
if word.contains?("#")
link_to hashtag.name, hashtag_path(hashtag.name)
else
word
end
end
content_with_links.join(" ")
end
end
Run Code Online (Sandbox Code Playgroud)
因此,我们对内容中的每个单词进行迭代,用链接替换主题标签,其余部分保持“原样”。
| 归档时间: |
|
| 查看次数: |
826 次 |
| 最近记录: |