Ich befolge das Tutorial https://devcenter.heroku.com/articles/direct-to-s3-image-uploads-in-rails#jquery-file-upload-callbacks, um s3_direct_upload für die lokale Entwicklungsumgebung zu verwenden. Es gibt einige Javascripts, die die Dateiuploadfunktion für jede Dateifelder festlegen. Alles funktioniert gut, wenn ich einfach die Codes direkt unter dem Formular einfüge, aber es funktioniert einfach nicht, wenn ich den Code in eine js.erb-Datei unter app/assets/javascripts/
einfüge. Der Fehler ist:Asset-Pipeline kann @ variables nicht zurückgeben, während die Ruby-Codierung in .js.erb in Rails verwendet wird
ActionView::Template::Error (undefined method `url' for nil:NilClass
(in /s3_direct_upload_gem_test/app/assets/javascripts/s3_direct_upload.js.erb)):
18:
19: <%= @s3_direct_post.url %>
20:
21: <%= javascript_include_tag :s3_direct_upload %>
app/assets/javascripts/s3_direct_upload.js.erb:14:in `block in singleton class'
Wie Sie sehen können, line 19
aus dem obigen Code verwendet wird, aus dem @ s3_direct_post.url zu drucken. Es wurde korrekt gedruckt, wenn ich das gesamte Javascript in die Datei einfüge. Wenn ich die Linie 14 in der s3_direct_upload.js.erb
verfolgen, ist es die url
Linie:
fileInput.fileupload({
fileInput: fileInput,
url: '<%= @s3_direct_post.url %>',
type: 'POST',
autoUpload: true,
formData: <%= @s3_direct_post.fields.to_json.html_safe %>,
Es ist wie es aus irgendeinem Grund scheint, die JavaScript-Datei unter dem assets
Ordner (in der Asset-Pipeline) separat kompiliert und so @s3_direct_post
, die in der Controller
eingestellt ist, wird hier nicht eingestellt.
Natürlich kann ich diese in <script>
immer an der Viewer-Datei setzen, aber es ist nicht ganz elegant. Gibt es eine Möglichkeit, die seitenspezifische js-Codierung zu trennen und das obige Problem zu lösen?
könnten Sie die Zeile '<% p self.class%>' vor dem Fehler einfügen? –