【问题标题】:Ruby - trying to make hashtags within string into linksRuby - 试图将字符串中的主题标签变成链接
【发布时间】:2014-12-07 08:18:54
【问题描述】:

我正在尝试将字符串中的主题标签制作成链接。

例如我想要一个当前的字符串:“我是一个包含#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 线程 - 但挫败感让我变得更好,作为一个初学者 ruby​​ist,我真的很感激如果有人可以请帮助我!

我的'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

【问题讨论】:

    标签: ruby regex iteration hashtag


    【解决方案1】:

    这是帮助您入门的代码。这应该用链接替换(就地)string 中的主题标签:

    <% string.gsub!(/#\w+/) do |tag| %>
      <% link_to("##{tag}", url_you_want_to_replace_hashtag_with) %>
    <% end %>
    

    您可能需要在字符串上使用html_safe 以在之后显示它。

    正则表达式不考虑更复杂的情况,例如##tag0#tag1#tag2 的情况。 tag0tag2 是否应该被视为主题标签?此外,如果您只想将标签限制为字母数字和数字,您可能需要将 \w 更改为 [a-zA-Z0-9]

    【讨论】:

    • 谢谢,这成功了!数小时的沮丧终于得到缓解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    相关资源
    最近更新 更多