2016-08-04 15 views
0

Ich arbeite an einer Single-Page-Site und habe das Ajax-Laden von Templates zum Einfügen in den Content-Teil der Website bekommen. Allerdings habe ich Probleme mit mehreren Vorlagen, die einen Parameter verwenden.Ruby on Rails - Modifizierender Teil von eingebettetem Ruby in .js.erb

Ich habe 5 Vorlagen, shared/Blog, shared/Projekte usw.

In meinem Controller, ich mache einen AJAX-Aufruf zu 'ersetzen'

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 

In replace.js. erb, ich habe diesen Code:

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

ich es ‚shared/Blog‘ nur gehalten haben zu sagen, weil es für das Laden des Blog funktioniert, wenn ich die eingebettete Ruby-statisch so halten. Ich kann jedoch nicht herausfinden, wie ich den "Blog" -Teil von "shared/blog" hier in den @ content-Variablen ersetzen soll. Ich habe Dinge wie # {content} versucht, aber ohne Erfolg.

(Es tut richtig den Inhalt Variable erhalten, ist das Problem nur mit ihm unter Verwendung)

Jede mögliche Hilfe würde geschätzt!

Danke.

Antwort

0

String-Interpolation erfordert doppelte Anführungszeichen. Sie sind nach:

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

Ein paar Anmerkungen:

  • Die :partial => hat Jahre nicht notwendig gewesen in Rails. Verwenden Sie einfach render <partial_name>.
  • Rails enthält bereits einen Platz zum Speichern Ihrer geteilten Teiltöne: app/views/application. Sie sollten Ihre geteilten Teiltags dorthin verschieben und sie dann einfach mit render(@content) rendern. Dies ist wichtig für die Funktionsweise von Rails, da Sie die partiellen in Controller-spezifischen Ansichtspfaden überschreiben können. Wenn Sie beispielsweise render("blog") aufrufen, wird app/views/<controller_name>/blog.js.erb gerendert, wenn sie vorhanden ist, und andernfalls auf app/views/application/blog.js.erb zurückgesetzt.
+0

Vielen Dank! Das hat funktioniert! Ein bisschen neu für RoR, also habe ich nicht daran gedacht. –