在 Ruby on Rails 中使用 bitly



我正在构建一个小应用程序,用户可以在其中发布短消息和URL(twitter)

为了呈现包含 url 的帖子,我使用自动链接 gem https://github.com/tenderlove/rails_autolink 和以下代码,从文本中提取 url 并将它们转换为链接:

<%= auto_link(feed_item.content) %>

我还设法通过使用位 api 和位 gem 渲染了一个缩短的 url;https://github.com/philnash/bitly/

<%= auto_link(client.shorten("http://google.com").short_url) %>

我尝试在创建帖子时缩短,在模型中使用以下代码。

class Micropost < ActiveRecord::Base
  before_create :bitly_shorten
  private
  def bitly_shorten
    client = Bitly.client 
    urls = URI.extract(self.content) 
     urls.each do |url|
        self.content.gsub(url, client.shorten(url).short_url) 
    end
  end
end

即使链接显示在我的位仪表板中,也只有完整的 url 保存到数据库中。这段代码有什么问题?

以下是

您需要遵循的步骤

  1. 首先,您需要提取消息中的所有URL

    urls = URI.extract(feed_item.content) 
    
  2. 然后将所有 URL 替换为 Bitly 缩短 URL

    urls.each do |url|
      feed_item.content.gsub(url, client.shorten(url).short_url)  
    end
    
  3. 然后使用auto_link

    <%= auto_link(feed_item.content) %> 
    

您可能应该在用户创建帖子时执行缩短。

创建帖子时,请从邮件中提取所有链接并缩短它们。然后,您只需要在运行时显示内容。

这更有效,因为它将防止页面在每次呈现视图时调用缩短器服务。

在控制台中尝试代码后,我意识到我错过了 gsub 之后的 !,这样可以防止替换的 url 保存到数据库中。

以下解决方案对我有用;

class Micropost < ActiveRecord::Base
  before_validation :bitly_shorten #shorten before the 150 character limit validation
  private
  def bitly_shorten
    client = Bitly.client 
    urls = URI.extract(self.content) 
     urls.each do |url|
        self.content.gsub!(url, client.shorten(url).short_url) 
    end
  end
end

相关内容

  • 没有找到相关文章

最新更新