我正在构建一个小型应用程序,用户可以在其中发布短消息和urls (twitter)
为了呈现包含urls的文章,我使用autolink创业板autolink和下面的代码,从文本中提取urls并将它们转换为链接:
<%= auto_link(feed_item.content) %>我还使用bitly和bitly实现了一个缩短的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尽管链接显示在我的小仪表板中,但只有完整的urls保存到数据库中。这个代码有什么问题?
发布于 2013-12-24 14:20:52
下面是您需要遵循的步骤
发布于 2013-12-24 14:20:32
您可能应该在用户创建post时执行缩短。
创建帖子时,从消息中提取所有链接并缩短它们。然后,您只需要在运行时显示内容。
这更有效,因为它将防止页面每次提供视图时调用缩短服务。
发布于 2014-01-14 13:54:19
在尝试了控制台中的代码之后,我意识到我错过了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
endhttps://stackoverflow.com/questions/20761979
复制相似问题