2016-08-04 5 views
0

私は単一ページのサイトで作業しており、サイトのコンテンツ部分に挿入するテンプレートのajax読み込みを取得しました。しかし、私はパラメータを使用して、複数のテンプレートでこれを行うのに問題があります。Ruby on Rails - .js.erbの埋め込みRubyの一部を変更する

私は私のコントローラでなど5つのテンプレート、共有/ブログ、共有/プロジェクト、

を持って、私はreplace.jsで

pages = ['blog', 'projects', 'resume', 'gallery', 'contact'] 

def replace 
    @content = params[:content] 
    if not pages.include? content 
    content = 'blog' 
    end 
    respond_to do |format| 
    format.js 
    end 
end 

'を置換' へのAJAX呼び出しをやっています。私はそのような埋め込まれたRubyの静的を続けるならば、それはブログをロードするために動作するためだけの「共有/ブログ」を言って、それを保持している

$(".content_inner").html("<%= j render(:partial => 'shared/blog') %>"); 

:ERBは、私はこのコードを持っています。しかし、ここでは 'shared/blog'の 'blog'部分を@content変数の中に置き換える方法を見つけることができません。私は#{content}のようなものを試しましたが、役に立たないものです。

(それは正しくコンテンツ変数を受け取り、問題はそれを使っているん)

任意の助けをいただければ幸いです!

ありがとうございました。

答えて

0

文字列の補間には二重引用符が必要です。

$(".content_inner").html("<%= j render("shared/#{@content}") %>"); 

いくつかの注意事項:

  • :partial =>年のRailsでのために必要とされていなかったあなたは後にしています。ちょうどrender <partial_name>を使用してください。
  • Railsには共有部分を保存する場所が既に用意されています:app/views/application。共有部分をそこに移動してから、render(@content)を使って単純にレンダリングすることができます。これは、コントローラ固有のビューパスでパーシャルをオーバーライドできるので、Railsの動作にとって重要です。たとえば、render("blog")を呼び出すとapp/views/<controller_name>/blog.js.erbがレンダリングされ、それ以外の場合はapp/views/application/blog.js.erbにフォールバックされます。
+0

ありがとうございました!それはうまくいった! RoRの新しいものなので、それをするとは思わなかった。 –

関連する問題