2014-10-12 4 views
0

Я пытаюсь сделать хэштеги внутри строки в ссылках.Ruby - попытка сделать hashtags внутри строки в ссылках

например. Мне нужна строка, которая в настоящее время: «Я - строка, содержащая #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 threads- но разочарование попавшего лучше меня, и как начинающее rubyist, я d действительно оцените это, если кто-то может помочь мне!

код в моем «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 

ответ

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], если вы хотите ограничить теги только буквенными цифрами и цифрами.

+0

Спасибо, это сработало! Время разочарования, наконец, облегчилось. –

 Смежные вопросы

  • Нет связанных вопросов^_^