9

jquery を使用して Rails パーシャルをロードする最良の方法について知りたいです。これまでのところ、解決策が機能しないことを試しました:

$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() {
alert('Load was performed.');
});

これのために別のアクションやコントローラーを構築し、ルートを設定するための最良の解決策はありますか? 最初のソリューションを機能させることはより簡単に思え、おそらくそれほど安らかではないので、私は尋ねます。

ありがとう。

4

5 に答える 5

8

HTTP リクエストからテンプレート ファイル (.erb) にアクセスできないようにする必要があります。これは非常に悪い習慣です。それらを Web サーバーのパスの外に置き、アプリケーションからのみアクセスすることをお勧めします。

Railsについてはよくわかりませんが、これを行うには別のコントローラー(または何でも)を作成する必要があると思います。

編集これは、.erb ファイルが埋め込み Ruby ファイルであり、それらを要求しようとすると<%= page_title %>、ユーザーに表示したくない不要なデータがすべて取得されるためです。したがって、これらの .erb ファイルを Rails アプリケーションに渡して、適切に HTML に解釈されるようにする必要があります。

于 2010-02-09T14:40:06.860 に答える
3

これがあなたが望むものです:

http://www.slideshare.net/JamesEdwardGrayII/ajax-with-jquery-in-rails

于 2010-07-12T05:28:57.300 に答える
3

Rails 3でできること...

コントローラ

@content = '/some/partial'

ビュー - haml.erb(html.erb) または js.erb のいずれか

$('#myDiv').html("<%= escape_javascript render @content %>");

Rails 2 (noConflict が追加されない限りプロトタイプのみが利用可能) の場合は、これを試すことができます...

コントローラーで

@content = render :partial=>"/users/cool_partial"

あなたのjsを呼び出します

myFunction(#{@content.to_json})

あなたの機能...

myFunction = function(content){

    $("myDiv").html(content);

}

アクションを介してこれをより適切に処理できるというニュートリノに同意します。

def get_partial
  render 'some/partial'
end

お役に立てれば

于 2012-04-20T21:12:23.690 に答える
3

コードが機能しない理由は、Rails がビュー ファイルを外部に公開しないためです。目的を達成するには、このパーシャルをレンダリングするアクションが必要です。

def image_gallery
  render :partial => "image_gallery"
end

また、標準の ajax ヘルパー (プロトタイプを使用) を同等の jquery 指向のものに置き換える jRails と呼ばれるプラグインもあります。あなたの場合、次のようなものを使用します

<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %>

さらに、Rails 3 では必要ありません。このリンクを参照してください。

于 2010-02-09T14:45:51.017 に答える
3

別の方法:

$('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>');
于 2012-05-15T23:48:48.263 に答える