2010-07-13 20 views
0

我正在尽我所能为my site(这是一个rails站点)创建站点徽章或小部件。在rails中创建站点徽章或小部件:调用第二个脚本的问题

本质上,它是一个用户发布他们创建的内容的网站,其他喜欢该内容的用户可以通过捐款表达他们的赞赏。

我问了一个similar question,回想一下如何创建一个小部件,但那是在我完成任何真正的Javascript研究之前。

第一个脚本(在本地主机:3000/Java脚本/ widget.js)工作得很好,我认为:

var Widget = 
{ 
    init:function() 
    { 
     var loc = window.location; 
     var title = document.title; 
     var href = 'http://localhost:3000/donations/new.js?url=' + encodeURIComponent(loc); 

     href = href + '&title=' + encodeURIComponent(title); 

     var script = document.createElement('script'); 
     script.src = href; 
     script.type = "text/javascript"; 

     document.documentElement.firstChild.appendChild(script); 

    } 
}; 
Widget.init(); 

(为什么我起名叫new.js是因为这原因,所有的统计数据链接显示在主网站) 为了测试这个脚本我做了一个简单的HTML文件来调用它:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Test Widget</title> 
     <script src="http://localhost:3000/javascripts/widget.js" type="text/javascript"></script> 
    </head> 
    <body> 
     <h1>Test Widget</h1> 
    </body> 
</html> 

当上述脚本运行我检查萤火虫果然调用第二个脚本:

<script src="http://localhost:3000/donations/new.js?url=file%3A%2F%2F%2FC%3A%2Fgoldhat_production%2Ftest_widget.html&amp;title=Test%20Widget" type="text/javascript"></script> 

最后,我创建了下面的脚本new.js.erb文件只是为了确保它被称为:

var Stats = 
{ 
    init: function() 
    { 
     alert("Hello World!"); 
    } 
}; 
Stats.init(); 

而在捐赠控制器我下面的代码添加到“新的”行动:

respond_to do |format| 
    format.js 
    format.html 
end 

所以我给它一个旋转,当我刷新页面我没有得到一个Hello World警报,但是当我得到什么实际被称为我得到这个错误(截断):

26<h1> 
27 ActionController::MethodNotAllowed 
28 
29</h1> 
30<pre>Only put requests are allowed.</pre> 
31 
32 
33 
34<p><code>RAILS_ROOT: c:/goldhat_production</code></p> 
35 
36<div id="traces"> 

似乎有很多地方我可能会出错,但我不知道在哪里。

回答

2

您的routes.rb文件只允许put请求您的new操作。如果您使用的是map.resources,则新应该允许获取,但看起来您并未使用该功能。

我看你有三种选择:

1)如果你打算使用RJS,然后移动到一个尚未被使用的不同方法的JavaScript调用,并设置了路由到行动如有必要。

2)如果你不打算使用RJS,只是将其移动到静态资源。只需将文件移动到您的/public/javascripts目录并从那里链接到它。

3)允许get请求您的new方法,将此添加到您的routes.rb。这可能只是允许您现有的路由语句中的操作,具体取决于已经存在的内容。

map.connect '/donations/new', :controller => :donations, :action => :new, :conditions => { :method => :get } 

我会亲自去与选项1或2,只是因为我没有看到关系的“新”,但我可能看不到全貌。

+0

我认为这可能与我的路线有关。我必须尝试一下并让你知道。 – 2010-07-13 00:46:46

+0

嗨杰夫,你的解决方案工作。 我搞砸了路线,并决定最好有我自己的控件,只是为了不影响其他功能。 最后我在我的路线中有一个“map.resources:widget”这一行,以及一个包含hello世界代码的index.js.erb文件。看到在我的其他网站上弹出警报,这真是一种解脱! 非常感谢! – 2010-07-13 23:40:05