rails中的文章统计小部件

我一直在尝试为我的rails应用程序设计一个小部件,不幸的是发现自己缺乏Javascript技能……

我能够根据此博客的简短指南创建一个小部件: http : //www.eduvoyage.com/2008/8/3/widget-with-rails

但我需要的是与他们描述的有些不同。

如果您有一个类似于digg或tweetmeme的应用程序,并且对特定文章进行投票,那么您如何创建一个小部件来显示投票?

假设文章模型有名称,链接和votes_counter。

这是我试过的:

在文章控制器中:

def index @article = Article.find_by_link("#{request.url}") respond_to do |format| format.js format.html end end 

在index.js.erb中:

 var txt = '' txt += "
"; txt += "

Article vote count:

"; txt += ""; txt += "
"; document.write(txt);

我得到的问题是@article结果是零。 为了弄清楚出了什么问题,我将这段代码添加到了我的javascript文件中:

 txt += ""; 

屏幕上的结果是: http:// localhost:3000 / articles.js 。 显然,当它只返回javascript文件的路径时,我将无法使用find_by_link方法。 我在find_by_link方法中想要的是浏览器中的当前URL。

或者有更好的方法吗?

有没有办法让我的rails应用程序确切地知道正在引用哪篇文章?

许多小部件实际上运行两段代码:类似这样的东西:

客户端站点上的小部件代码:

  

widget.js

 (function(){ var loc = window.location, title = document.title, href = 'http://yourdomain.com/widgets/count.js?url=' + encodeURIComponent( loc ); href = href + '&title=' + encodeURIComponent( title ); var script = document.createElement('script'); script.src = href; script.type = "text/javascript"; // Call your real script: document.documentElement.firstChild.appendChild( script ); })(); 

然后你可以使用params[:url]params[:title]在Rails中访问它

这不是一个完整的解决方案,因为您的第二个脚本没有关于放置窗口小部件的位置的上下文。 大多数大的(digg,tweetmeme)使用document.write但我个人厌恶使用它。

如果我正在构建这整个事情,我可能会有一个空div,其中id是您拥有用户副本的窗口小部件代码的一部分,或者我可能在第一个js文件中使用document.write来写出一个持有div第二个脚本可以通过getElementById填充。

最后一句警告:确保在匹配前清理URL。 您不希望http://domain.comhttp://domain.com/提供两种不同的匹配。