我正在尝试将字符串中的主题标签转换为链接。
e.g。我想要一个当前的字符串:“我是一个包含#hashtag的字符串”转换为:“我是一个包含#hashtag的字符串”
我目前的代码如下:
<% @messages.each do |message| %>
<% string = message.content %>
<% hashtaglinks = string.scan(/#(\d*)/).flatten %>
<% hashtaglinks.each do |tag| %>
<li><%= string = string.gsub(/##{tag}\b/, link_to("google", "##{tag}") %><li>
<% end %>
<% end %>
我一直在尝试(徒劳)几个小时才能让它工作,通过许多类似的stackoverflow线程阅读 - 但是挫败感已经让我变得更好,作为初学者rubyist,我真的很感激它如果有人可以请你帮帮忙!
我的'server.rb'中的代码如下:
get '/' do
@messages = Message.all
erb :index
end
post '/messages' do
content = params["content"]
hashtags = params["content"].scan(/#\w+/).flatten.map{|hashtag|
Hashtag.first_or_create(:text => hashtag)}
Message.create(:content => content, :hashtags => hashtags)
redirect to('/')
end
get '/hashtags/:text' do
hashtag = Hashtag.first(:text => params[:text])
@messages = hashtag ? hashtag.messages : []
erb :index
end
helpers do
def link_to(url,text=url,opts={})
attributes = ""
opts.each { |key,value| attributes << key.to_s << "=\"" << value << "\" "}
"<a href=\"#{url}\" #{attributes}>#{text}</a>"
end
end
答案 0 :(得分:1)
以下是帮助您入门的代码。这应该使用链接替换(就地)string
中的主题标签:
<% string.gsub!(/#\w+/) do |tag| %>
<% link_to("##{tag}", url_you_want_to_replace_hashtag_with) %>
<% end %>
您可能需要在字符串上使用html_safe
以便以后显示它。
正则表达式不会考虑更复杂的情况,例如##tag0
或#tag1#tag2
时的情况。 tag0
和tag2
应该被视为主题标签吗?另外,如果您想将代码限制为字母数字和数字,则可能需要将\w
更改为[a-zA-Z0-9]
之类的内容。