Passing a block to gsub


So I have a product description field and in that product description field every time I have the @ symbol followed by a product id the following method will replace the @ sign with the products permalink in a <a href=""> format. The code below works.

  def product_description(product)     product.description.gsub(/@(\w+)/m) do |w|       ws = Product.find_by_id("#{$1}")       %{<a href="#{ws.permalink}">}     end   end

However now I want to be able to be able to give it two options, the @ and the @c. the @ sign will associate it with a product id and the @c will associate it with a category id. So I tried the following bellow but I can only get one or the other to work, I can not get them to work at the same time.

  def product_description(product)     product.description.gsub(/@(\w+)/m) do |w|       ws = Product.find_by_id("#{$1}")       %{<a href="#{ws.permalink}">}     end     product.description.gsub(/@c(\w+)/m) do |w|       ws = Category.find_by_id("#{$1}")       %{<a href="#{ws.permalink}">}     end   end

If anyone has some suggestions I would greatly appreciate it. Thanks in advance.

Well, I finally figured it out, might as well post it just in case anyone else is trying to do the same thing. Below is the code.

# converts @ signs into product links and category links def product_description(product)   product.description.gsub(/@(\w+)/m) do |w|     if #{$1} =~ /p(.*)/       wp = Product.find_by_id("#{$1}".delete "p")       %{<a href="#{wp.permalink}">}     else       wt = Taxon.find_by_id("#{$1}".delete "t")       %{<a href="/t/#{wt.permalink.chop}">}     end   end end

Pretty much what this allows me to do is I can take a text field and automatically add links to words for example;

this is a test, this is a link to a @p30 product</a>, and this is a link to a @t45 category</a>

That way it makes my admin views a little bit cleaner and eventually I will add a rescue feature so if that product or category has been deleted i wont have any broken links through out the site.