I am using acts_as_taggable according to the examples in the Rails
Recipes book. Everything works fine except for cases where I want to
use a tag with a dot (like .NET) or a slash (like COM/OLE).
The problem is not really with acts_as_taggable, but rather with
routing.
I am using the suggested technique where I use urls like /kb/list/
mytag to display all the entries tagged “mytag.”
Here is the console output showing what happens when I use urls with
dots or slashes:
This works as expected:
rs.recognize_path “/kb/list/mytag”
=> {:id=>“mytag”, :action=>“list”, :controller=>“kb”}
But check these out:
rs.recognize_path “/kb/list/.NET”
=> {:anything=>[“kb”, “list”,
“.NET”], :controller=>“kb”, :action=>“index”}
rs.recognize_path “/kb/list/COM%2FOLE”
=> {:anything=>[“kb”, “list”, “COM”,
“OLE”], :controller=>“kb”, :action=>“index”
}
Note that I replaced “/” with “%2F” because that’s what happens in the
browser when it urlencodes the string “COM/OLE.”
I suppose I could re-write the “list” action to use numeric ids
instead of tag names, but I would hate to lose that functionality.
Does anybody know how to get routing to work under these circumstances?
Why don’t you use the permalink_fu plugin? It converts all the special
characters you described in a pretty url format. So instead of COM/OLE
it would be com-ole, then you could easily find your inestances by doing
Model.find_by_permalink(params[:permalink)
–
Serengeti wrote:
I am using acts_as_taggable according to the examples in the Rails
Recipes book. Everything works fine except for cases where I want to
use a tag with a dot (like .NET) or a slash (like COM/OLE).
The problem is not really with acts_as_taggable, but rather with
routing.
I am using the suggested technique where I use urls like /kb/list/
mytag to display all the entries tagged “mytag.”
Here is the console output showing what happens when I use urls with
dots or slashes:
This works as expected:
rs.recognize_path “/kb/list/mytag”
=> {:id=>“mytag”, :action=>“list”, :controller=>“kb”}
But check these out:
rs.recognize_path “/kb/list/.NET”
=> {:anything=>[“kb”, “list”,
“.NET”], :controller=>“kb”, :action=>“index”}
rs.recognize_path “/kb/list/COM%2FOLE”
=> {:anything=>[“kb”, “list”, “COM”,
“OLE”], :controller=>“kb”, :action=>“index”
}
Note that I replaced “/” with “%2F” because that’s what happens in the
browser when it urlencodes the string “COM/OLE.”
I suppose I could re-write the “list” action to use numeric ids
instead of tag names, but I would hate to lose that functionality.
Does anybody know how to get routing to work under these circumstances?
Thanks for the tip! I’ll give that a try.
I’m a little stuck. Maybe you can help.
I am adding:
has_permalink :name
to the class definition for Tag.
When I do this I get an error:
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1
.15.3/lib/active_record/base.rb:1235:in
method_missing':NoMethodError: undefine d method
has_permalink’ for Tag:Class
I assume this means that the acts_as_taggable plugin is trying to load
its models before permalink_fu has been loaded.
I have tried adding:
require ‘permalink_fu’ to tag.rb, but that returns file not found
errors. I have tried a few different ways of specifying the path to
the permalink_fu plugin but none work.
Is there another way to accomplish this?