控制器动作用于链接缩短

时间:2015-11-22 12:21:27

标签: ruby-on-rails ruby routes

这就是我some arbitrary outer text <textarea as="codebox"> &lt;!-- BEGIN switch_user_authreply --&gt; &lt;div id=&quot;mobileActionBar&quot;&gt; &lt;a href=&quot;{U_POST_REPLY_TOPIC}&quot; rel=&quot;nofollow&quot; class=&quot;navbar&quot;&gt; &lt;div class=&quot;mobileActionLabel&quot;&gt;{L_POST_REPLY_TOPIC}&lt;/div&gt; &lt;/a&gt; &lt;/div&gt; &lt;!-- END switch_user_authreply --&gt; </textarea> some arbitrary outer text 模型的样子。

Link

使用SecureRandom生成id: 6, long_url: "http://google.com", short_url: "91befc", created_at: Sun, 22 Nov 2015 11:53:01 UTC +00:00, updated_at: Sun, 22 Nov 2015 11:53:01 UTC +00:00> ,以努力创建类似bit.ly的过程。

如果有人复制并粘贴http://bitlyclone.com/3jdjh,这是他们“缩短”链接时显示的内容,我希望它在数据库中查找short_url并重定向到它。 / p>

1 个答案:

答案 0 :(得分:1)

你可以这样做:

# app/controllers/links_controller.rb
def show
  link = Link.find_by!(short_url: params[:slug])

  redirect_to link.long_url
end

这假定您确保long_url在添加时有效。此外,如果输入的find_by!不存在,则使用short_url可确保呈现404。

# config/routes.rb
get '/:slug', to: 'links#show'

您的路线将直接指向此控制器操作,并将short_url作为参数传递给它。

然而,有一句警告。此路线将匹配很多内容,并且由于路线从上到下(在routes.rb文件中)匹配,因此请确保它不会优先于您应用中的其他路线。