Javascript rails中的Article stats小部件

Javascript rails中的Article stats小部件,javascript,ruby-on-rails,widget,Javascript,Ruby On Rails,Widget,我一直在尝试为我的rails应用程序设计一个小部件,不幸的是我发现自己缺乏Javascript技能 我能够根据这个博客的简短指南创建一个小部件: 但我需要的和他们描述的有点不同 如果你有一个类似digg或tweetmeme的应用程序,对某篇文章有投票权,你如何创建一个小部件来显示投票权 假设一个文章模型有一个名称、一个链接和一个计数器 这就是我所尝试的: 在文章中: def index @article = Article.find_by_link("#{request.url}")

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

我能够根据这个博客的简短指南创建一个小部件:

但我需要的和他们描述的有点不同

如果你有一个类似digg或tweetmeme的应用程序,对某篇文章有投票权,你如何创建一个小部件来显示投票权

假设一个文章模型有一个名称、一个链接和一个计数器

这就是我所尝试的:

在文章中:

    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 += "<div id='article_widget'>";
txt += "<h2>Article vote count:</h2>";
txt += "<%= escape_javascript(@article.votes)  %>";
txt += "</div>";

document.write(txt);
var txt=''
txt+=”;
txt+=“文章投票计数:”;
txt+=”;
txt+=”;
document.write(txt);
我遇到的问题是,@文章结果是零。为了找出问题所在,我在javascript文件中添加了以下代码:

txt += "<%= escape_javascript(request.url) %>";
txt+=”;
屏幕上的结果是:。显然,当find_by_link方法只返回javascript文件的路径时,我将无法使用它。在find_by_link方法中,我想要的是浏览器中的当前url

还是有更好的方法


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

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

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

<script src="http://yourdomain.com/javascripts/widget.js" type="text/javascript"></script>
然后可以在Rails中使用
params[:url]
params[:title]

这不是一个完整的解决方案,因为您的第二个脚本没有放置小部件的上下文。大多数大型网站(digg、tweetmeme)都使用
文档。编写
,但我个人不喜欢使用它

如果我正在构建这整件事,我可能会有一个id为用户副本的小部件代码的一部分的空div,或者我可能会使用
文档。在第一个
js
文件中写入
,写出一个保持
div
,第二个脚本可以通过
getElementById
填充


最后一句警告:在匹配之前,请确保清除URL。您不需要
http://domain.com
http://domain.com/
提供两个不同的匹配项。

这似乎是一个很好的建议,尽管当我尝试查看输入txt+=”时得到的结果时;url无限重复。不知道该怎么办。我对编程非常陌生,只真正了解ruby、rails和SQL。我认为一个小部件应该足够简单,这样我就不必学习javascript了,我应该去买一本书,学习它只是为了制作一个小部件吗?嗯,不知道你所说的重复本身是什么意思。它一直在重新加载同一页?或者它打印了一行没有结尾的URL并冻结了服务器?它打印了一行没有结尾的URL。不知道为什么。我知道这是半年前的事了,但我真的要感谢你们的解决方案。不过,我不得不开始学习Javascript来理解它。最后,我把一切都做好了。这个小部件还远没有完成,但至少我已经开始了。非常感谢你的帮助@Kenji,我很高兴你开始了。。。希望你能成功!
(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 );
})();