RubyRedGrapefruit
RubyRedGrapefruit

Reputation: 12214

How can I use a permalink containing a slash in a named route in Rails 3?

I followed Ryan Bates screencast of how to use permalinks in a Rails application. Unfortunately I am stuck with an issue when some of my permalinks contain slashes. Is there anything that I can do in the controller to encode those on the fly, or do they need to be encoded in the database?

Upvotes: 1

Views: 141

Answers (1)

Matthew Lehner
Matthew Lehner

Reputation: 4027

You can use Rack::Utils.escape to return a clean, friendly URI. For instance:

Rack::Utils.escape("This/is/not/a/good/url")

will return

"This%2Fis%2Fnot%2Fa%2Fgood%2Furl"

and

Rack::Utils.unescape("This%2Fis%2Fnot%2Fa%2Fgood%2Furl")

converts it back to the original string:

"This%2Fis%2Fnot%2Fa%2Fgood%2Furl"

You'll have to wire those methods into the find methods in the controller, but should work out for you.

To generate permalinks that are safe, use something like this. It will create a 4 character long, url safe permalink and check to make sure there are no duplicates.

def create_permalink
  loop do
    self.permalink = SecureRandom.urlsafe_base64(4).downcase
    break permalink unless ModelName.find_by_permalink(permalink)
  end
end

Upvotes: 2

Related Questions