无法完成这项工作。
我有
class QuestionsController < ApplicationController
呈现表单
<%= form_for [question, QuestionResponse.new], remote: true, :html => {:multipart => true} do |f| %>
<%= f.text_area :text, cols: 30, rows: 8, %>
<%= f.file_field :image, id:"file4", title: "Attach Photo" %>
<%= f.submit "Reply", class: "btn-green" %>
<% end %>
比我有
QuestionResponsesController
def create
@question = #retrieve from params
@response = @question.response.new(params[:question_response])
@question.save!
end
这通过javascript响应 所以我有
create.js
$("#<%= j "#{@question.id}_new_response"%>").before('<%= j render("response", response:@response)%>');
如果我没有附加文件,则可以正常使用
当我附上我的文件时,我得到了 模板缺失
Missing template question_responses/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :arb, :coffee]}.
想到这是因为rails决定它应该响应html,然后才能解决.js响应。
我试过了:
这不起作用它最终只是在浏览器中渲染javascript而不是执行它。
有什么想法吗?猜它很简单。
答案 0 :(得分:3)
不幸的是,通过ajax发送多部分表单没有简单而通用的方法。
但是,您可以使用其他几种方法来实现此目的:
此外,您可以查看此帖子:Ruby on Rails AJAX file upload以供您参考。
HTH:)
答案 1 :(得分:1)
我们已实施Ajax文件上传(http://video-conference-demo.herokuapp.com - 注册并尝试上传新的个人资料图片)
我们这样做的方式是使用JQuery-File-Upload和Ajax:
#app/views/your_view.html.erb
<!-- New Avatar Upload Form -->
<%= form_for :upload, :html => {:multipart => true, :id => "avatar"}, :method => :put, url: profile_path(current_user.id), "data_id" => current_user.id do |f| %>
<div class="btn btn-success fileinput-button avatar" id="avatar_container">
<%= f.file_field :avatar, :title => "Upload New" %>
<%= image_tag(@user.profile.avatar.url, :width=> '100%', :id => "avatar_img", :alt => name?(@user)) %>
</div>
<% end %>
我们使用这个JS处理上传:
$('#avatar').fileupload({
url: '/profile/' + $(this).attr('data_id'),
dataType: 'json',
type: 'post',
add: function (e, data) {
data.submit();
},
success: function (data, status) {;
//handle data
}
});
这是控制器代码:
def update
@profile = User.find(current_user.id)
@profile.profile.update(upload_params)
respond_to do |format|
format.html { render :nothing => true }
format.js { render :partial => 'profiles/update.js' }
format.json {
render :json => @profile.profile.as_json(:only => [:id, :avatar], :methods => [:avatar_url])
}
end
end
<强>代码强>
我会说你的问题将与你如何保存问题有关:
QuestionResponsesController
def create
@question = #retrieve from params
@response = @question.response.new(question_response_params)
@question.save!
end
private
def question_response_params
params.require(:question_response).permit(:text, :image)
end