Создание значка сайта или виджета в рельсах: проблема с вызовом второго скрипта - PullRequest
0 голосов
/ 13 июля 2010

Я делаю все возможное, чтобы создать значок или виджет для моего сайта , который является сайтом rails.

По сути, это сайт, на котором пользователи публикуют контент, который они создали, а другие, кому нравится этот контент, могут сделать пожертвование, чтобы выразить свою признательность за него.

Я задал похожий вопрос некоторое время назад о том, как создать виджет, но это было до того, как я действительно изучил Javascript.

Первый скрипт (в localhost: 3000 / javascripts / 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>

Когда запускается приведенный выше скрипт, я проверил firebug и убедился, что он вызывает второй скрипт:

<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, когда обновляю страницу, но когда я получаю то, что на самом деле вызывается, я получаю эту ошибку (усеченную):

<code> 26<h1>
27 ActionController::MethodNotAllowed
28
29</h1>
30<pre>Only put requests are allowed.
31 32 33 34

RAILS_ROOT: c:/goldhat_production

35 36

Кажется, есть много мест, где я мог бы ошибиться, хотя я не уверен, где именно.

1 Ответ

2 голосов
/ 13 июля 2010

Ваш файл rout.rb разрешает только put запросы к вашему действию new. Новое должно разрешить get, если вы используете map.resources, но, похоже, вы не используете эту функциональность.

Я вижу, у вас есть три варианта:

1) Если вы собираетесь использовать rjs, переместите вызов javascript в другой метод, который еще не используется, и при необходимости настройте маршрут к этому действию.

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

2) Если вы не собираетесь использовать rjs, просто переместите его на статические ресурсы. Просто переместите файл в каталог /public/javascripts и укажите ссылку на него.

3) разрешить get запросы к вашему методу new, добавив его в ваш route.rb. Это может быть просто разрешение действия в существующей инструкции маршрута, в зависимости от того, что уже есть.

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

Я бы лично выбрал вариант 1 или 2 только потому, что не вижу связи с «новым», но, скорее всего, не вижу полной картины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...