This is something I am using inside my model
This is the URL that gets posted to another 3rd party website through API
Post Model (post.rb)
\
You only need to add one attribute to post. The attribute name is permalink.
Try running:
rails g migration add_permalink_to_posts permalink:string
rake db:migrate
You have twoActive Record Callbacks you can choose from: before_save or before_create (review the difference between both). This example is using the before_save callback.
note : for Rails 3.x
class Post < ActiveRecord::Base
attr_accessible :content, :permalink
before_save :make_it_permalink
def make_it_permalink
# this can create a permalink using a random 8-digit alphanumeric
self.permalink = SecureRandom.urlsafe_base64(8)
end
end
urlsafe_base64
And in your routes.rb file:
match "/post/:permalink" => 'posts#show', :as => "show_post"
In posts_controller.rb:
def index
@posts = Post.all
end
def show
@post = Post.find_by_permalink(params[:permalink])
end
Finally, here are the views (index.html.erb):
<% @posts.each do |post| %>
<p><%= truncate(post.content, :length => 300).html_safe %>
<br/><br/>
<%= link_to "Read More...", show_post_path(post.permalink) %></p>
<% end %>
"Altering the primary key in Rails to be a string" is related to your question.
I would:
match '/post/:code')controller#show, use Post.find_by_code(params[:code]).