2

単純なブログアプリケーションに水銀を追加していて、最新バージョンを使用したいのですが、更新を保存するためにそれを取得できませんでした。これが私のコードです:

Gemfile:

gem 'rails', '3.2.11'
gem "thin", "~> 1.3.1"
gem 'mercury-rails'
gem 'paperclip'

group :development do
  gem 'taps'
  gem "nifty-generators"
  gem 'sqlite3'
end

gem 'jquery-rails'

blogs_controller.rb:

  def update
    @blog = Blog.find(params[:id])
    if @blog.update_attributes(params[:blog])
      redirect_to @blog
    else
      render 'edit'
    end
  end

  def mercury_update
    blog = Blog.find(params[:id])
    blog.content         = params[:content][:blogContent][:value]
    blog.save!
    render text: ""
  end

blog.rb:

class Blog < ActiveRecord::Base
  attr_accessible :title, :content, :author
end

ルート.rb:

  Mercury::Engine.routes
  mount Mercury::Engine => '/'
  root :to => "pages#home"

  namespace :mercury do
    resources :images
  end

  resources :blogs do
    member { post :mercury_update }
  end

mercury.html.erb

  <body>
    <script type="text/javascript">
      // Set to the url that you want to save any given page to, leave null for default handling.
      var saveUrl = null;

      // Instantiate the PageEditor
      new Mercury.PageEditor(saveUrl, {
        saveStyle:  'form', // 'form', or 'json' (default json)
        saveMethod: null, // 'PUT', or 'POST', (create, vs. update -- default PUT)
        visible:    true  // boolean - if the interface should start visible or not
      });
    </script>
  </body>

blogs / show.html.erb:

 <div id="blogFull" class="rounded-corners-mild">

 <div id="blogTitle">
   <h1 style="font-size:150%; text-align:center; " class="mercury-region" ><%= @blog.title%></h1>
  </div>

  <div data-mercury="full" id="blogContent" class="mercury-region">
    <%= raw @blog.content %>
  </div><br />
  <%= link_to "mercury", "/editor" + "/blogs" + "/#{@blog.id}", :class => 'bestButton',  
          id: "edit_link", data: {save_url: mercury_update_blog_path(@blog)} %>

追加:mercury.js:

jQuery(window).on('mercury:ready', function() {
        var saveUrl = $("#edit_link").data("save-url");
        Mercury.saveUrl = saveUrl;
});
Mercury.on('saved', function() {
        window.location.href = window.location.href.replace(/\/editor\//i, '/');
});

私もこれで試しました:mercury.jsへ:

  onload: function() {
    //Mercury.PageEditor.prototype.iframeSrc = function(url) { return '/testing'; }
    Mercury.on('ready', function() {
      var link = $('#mercury_iframe').contents().find('#edit_link');
      Mercury.saveUrl = link.data('save-url');
      link.hide();
    });

    Mercury.on('saved', function() {
      window.location.href = window.location.href.replace(/\/editor\//i, '/');
    });
  }

どちらも機能しませんでした。どちらも私を編集者に連れて行き、編集を許可してくれました。まだ変更を保存できていません。ありがとうございました。

4

2 に答える 2

3

保存しようとするとエラーメッセージが表示されますか?それは何と言っていますか?保存できないと表示されているのにURLが正しい場合は、ログファイルを確認してください。

正しいsaveUrlを設定する際に問題が発生し、mercury.jsに以下を追加すると修正されました。

onload: function() {
    Mercury.on('ready', function() {
        var link = $('#mercury_iframe').contents().find('#edit_link');
        console.log("mercury ready ready", link);
        mercuryInstance.saveUrl = link.data('save-url');
        link.hide();
    });

    Mercury.on('saved', function() {
        window.location.href = window.location.href.replace(/\/editor\//i, '/');
    });
}

RailsCastsのこのスレッドで見つかりました。

編集:

あなたのコードに何か他のものがあることに気づきました。POSTアクションのルートを作成しました。Mercury.html.erbでは、saveMethodはデフォルトで「PUT」に設定されています。saveMethodを「POST」に変更します。

于 2013-01-16T21:37:54.713 に答える
3

私にとっては、「mercuryInstance」が上記の解決策に対応していないという問題がありました。私はmercury.jsの最後に追加されたこのjavascriptで動作するようにしました:

    jQuery(window).on('mercury:ready', function() {
        var link = $('#edit_link');
        Mercury.saveUrl =link.attr('data-save-url');
        link.hide();
    });
于 2013-02-21T19:17:28.890 に答える