附加<a href=""> to keywords in rails</a>

时间:2010-05-26 10:57:02

标签: jquery ruby-on-rails ruby

基本上,我想挑选一些关键字并动态分配链接。

我该怎么做呢?

让我说我有这样的事情;

<p>ruby, rails, php, python, django and sinatra</p>

我想指定像ruby和python这样的关键字的链接,所以最终的结果应该是这样的;

<p><a href="http://www.ruby-lang.org">ruby</a>, rails, php, <a href="http://www.python.org">python</a>, django and sinatra</p>

非常感谢任何帮助或建议!

5 个答案:

答案 0 :(得分:4)

一种方法,假设您只想链接整个单词:

html = "<p>ruby, rails, php, python, django and sinatra</p>"

word_links = { "ruby"   => "http://www.ruby-lang.org",
               "python" => "http://www.python.org" }

html.gsub(/\w+/) do |word|
  word_links[word] ? "<a href=\"#{word_links[word]}\">#{word}</a>" : word
end

如果您正在操作的文本相当大,但您要链接的单词列表非常小,则可以通过仅对匹配单词进行替换来稍微优化:

html.gsub(/\b(#{word_links.keys.join('|')})\b/,
          "<a href=\"#{word_links[$1]}\">#{$1}</a>")

请确保您没有可以出现在开始标记内的任何关键字(例如,在属性值内部,这将彻底破坏此解决方案。)对于真正强大的解决方案,您将必须使用正确的HTML解析器,只需替换内容文本。

答案 1 :(得分:3)

如果您想在将内容呈现给浏览器之前在服务器端执行此操作,那么您可以像

那样执行此操作
str = "<p>ruby, rails, php, python, django and sinatra scruby rubysd 12ruby'; ruby </p>"

link_hash = {'ruby' => "<a href = 'http://www.ruby-lang.org'>ruby</a>", 'python' => "<a href='http://www.python.org'>python</a>" }

link_hash.each_pair do |key, value|
  str = str.gsub(/\b#{key}\b/, value)
end

str #=> "<p><a href = 'http://www.ruby-lang.org'>ruby</a>, rails, php, <a href='http://www.python.org'>python</a>, django and sinatra scruby rubysd 12ruby'; <a href = 'http://www.ruby-lang.org'>ruby</a> </p>"

答案 2 :(得分:0)

只需使用文字替换?将“ruby”替换为“&lt; a href =”http://ruby-lang.org“&gt; ruby​​&lt; / a&gt;”并完成。 请参阅javascript参考中的String.replace。

答案 3 :(得分:0)

如果你想特别喜欢,我认为你可以使用后过滤器:

class MyController < ApplicationController
  after_filter :link_stuff

  protected

  def link_stuff
    # You'd want to do this more carefully, so as to only get "ruby"s in text, 
    # not in tags etc.
    response.body.gsub(/ruby/, "<a href = 'http://www.ruby-lang.org'>ruby</a>")
  end
end

答案 4 :(得分:0)

你可以这样做

首先将值作为数组(或列表)获取 例如:红宝石     PHP     python等..

将此数组发送给帮助者

def link_builder(arr)    html_string =“”

表示arr中的元素

 check whether your word needs a wrapper. you might want to do a table check 

 if warpper_needed?

    html_string = html_string + <a href='link'>elment</a>
 else
    html_string = html_string + <p>element</p>
 end

html_string

希望你有这个主意,(这可能不会起作用)

欢呼声, sameera