我已经开始创建一个基于模型的解决方案来创建短网址,但我想知道在它自己的集合中使用它是否更好(使用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
答案 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_url
,City
> city_url
等等。