rails mongoid url shortener

时间:2013-01-26 21:32:08

标签: ruby-on-rails ruby-on-rails-3 mongoid url-shortener mongoid3

我已经开始创建一个基于模型的解决方案来创建短网址,但我想知道在它自己的集合中使用它是否更好(使用mongoid)为模型之间的标记构建索引然后搜索?或者,如果存在一个宝石,而不是滚动我自己的解决方案。

现在我正在使用Mongoid :: Token为特定集合生成唯一令牌(即cUaIxBu),然后使用附加字母( - >(c)UaIxBu)来计算如何路由特定的控制器要求。

任何想法或指示?

在此示例中,alternatedoma.in/cUaIxBu将指向realdomain.com/cities/1234

路由

  get '/:id' => 'home#tiny_url', :constraints => { :domain => 'alternatedoma.in' }

控制器

  def tiny_url
    case params[:id].slice!(0)
    when 'f'
      @article = Article.find_by_token(params[:id])
      redirect_to feature_url(@article)
    when 'c'
      @city = City.find_by_token(params[:id])
      redirect_to city_url(@city)
    when 'p'
      @place = Place.find_by_token(params[:id])
      redirect_to feature_url(@place)
    end
  end

1 个答案:

答案 0 :(得分:1)

我们正在使用一个与我正在处理的应用程序中几乎相同的系统 - 它似乎工作正常(到目前为止!)。我唯一能想到的是,你可以将你的LoC归结为低级,以及在未来轻松添加对其他模型的支持(如果需要):

supported_models = {:a => Article, :c => City, :p => Place}
prefix = params[:id].slice!(0).to_sym
if supported_models.has_key?(prefix)
  @obj = supported_models[prefix].find_by_token(params[:id])
  redirect_to send(:"#{supported_models[prefix].name.underscore}_url", @obj)
end

显然,这需要您的路由助手遵循与模型相同的命名。即:Article> article_urlCity> city_url等等。