js.erb仅呈现ruby代码,而不呈现js

编辑:我自己解决了这个问题-见下文

我有一个表单,可以使用projects_controller.rb中包含的add_picture_to_project_path路由上传图像。该方法执行模型中的文件上传,然后将一些Json返回给我的控制器。完成此操作后,我要呈现add_picture_to_project.js.erb文件,但存在以下问题。只有ruby代码有效,javascript完全没有响应。

routes.rb

patch '/addLocalPicture',to: 'projects#add_picture_to_project',as: :add_picture_to_project

show.html.haml

= bootstrap_form_tag(url: add_picture_to_project_path,method: :patch,html: { :multipart => true }) do |f|
      .form-group    
        %input{type:'file',multiple: true,name:"picture",id:"fileupload"}
        = hidden_field_tag 'stock_id',"5da481f45d5f4443c644f89f"
        = hidden_field_tag 'project_id',@project._id
        = hidden_field_tag 'company_id',@company._id
        = f.submit("Valider",class: 'simple-btn')

projects_controller.rb

       def add_picture_to_project
       picture_params = {
                stock_id: params[:stock_id],project_id: params[:project_id],company_id: params[:company_id],}
       @picture = Picture.upload_picture(params[:picture],picture_params,bearer_token)

模型:picture.rb

def self.upload_picture tempfile,bearer_token
        params = {
                "photoUploadS3" => UploadIO.new(File.open(tempfile.path),MIME::Types.type_for(tempfile.path),File.basename(tempfile.path)),"stock_id" => picture_params[:stock_id],"project_id" => picture_params[:project_id],"company_id" => picture_params[:company_id],"filename" => File.basename(tempfile.path),"size" => File.size(tempfile.path)
            } 

        # Create the HTTP objects
        uri = URI("#{ENV['API_HOST']}/pictures/addLocalPicture")                       
        req = Net::HTTP::Post::Multipart.new uri.path,params

        req.add_field("Authorization","Bearer #{bearer_token}") #add to Headers
        res = Net::HTTP.start(uri.hostname,uri.port) do |http|
            res = http.request(req)
            response =  eval(encode_utf8(res.body))                  
            return response.to_struct       
        end                                               
    end    

这正在渲染仅执行红宝石内容的add_picture_to_project.js.erb ...也许是因为文件名?

add_picture_to_project.js.erb

console.log("hello");
<%= say "hello #{@picture}" %>

在我的终端机上

Rendering projects/add_picture_to_project.js.erb
 ______________________________________ 
/ "hello #<OpenStruct                  \
| stock_id=\"5da43c644f89f\ |
| ",|
| project_id=\"5da0c75300c |
| a\",|
| company_id=\"5caddb3d127 |
| 3\",|
| filename=\"RackMultipart20191105-536 |
| 84-1um4lsk.jpg\",size=412324,|
| unique_filename=\"ff3f2720-001a-11ea |
| -8828-01b6885e7183-RackMultipart2019 |
| 1105-53684-1um4lsk.jpg\",|
| created_at=\"2019-11-05T22:24:13.926 |
| Z\",|
| updated_at=\"2019-11-05T22:24:13.926 |
| Z\",status=1,|
| user_id=\"5d9f3817602ef027\" |
|,|
| projects=[\"5300ca |
\ \"]>"                                /
 -------------------------------------- 

  Rendered projects/add_picture_to_project.js.erb

要执行我的JavaScript,我该怎么做?

答案: 我的问题在picture.js文件中-当我的数据类型应为“脚本”时,我将其数据类型设置为Json。这解决了我的问题。我在这里留下我的问题,以便人们可以了解更多有关如何使用jquery文件上传器设置net http multipart文件上传的信息。

    $('#fileupload').fileupload({
        dataType: 'script',done: function (e,data) {
            console.log(data);
            $.each(data.result.files,function (index,file) {
                $('<p/>').text(file.name).appendTo(document.body);
            });
        }
    });
youbaio 回答:js.erb仅呈现ruby代码,而不呈现js

您需要确保控制器操作包括一个respond_to块,该块可让应用知道如何处理请求格式:

def add_picture_to_project
  picture_params = {
    stock_id: params[:stock_id],project_id: params[:project_id],company_id: params[:company_id],}
  @picture = Picture.upload_picture(params[:picture],picture_params,bearer_token)

  respond_to do |format|
    format.js
  end
end
,

答案: 我的问题在picture.js文件中-当我的数据类型应为“脚本”时,我将其数据类型设置为Json。这解决了我的问题。我在这里留下我的问题,以便人们可以了解更多有关如何使用jquery文件上传器设置net http multipart文件上传的信息。

    $('#fileupload').fileupload({
        dataType: 'script',done: function (e,data) {
            console.log(data);
            $.each(data.result.files,function (index,file) {
                $('<p/>').text(file.name).appendTo(document.body);
            });
        }
    });
本文链接:https://www.f2er.com/3157128.html

大家都在问