我正在使用ajax文件上传脚本上传照片并使用回形针在rails中处理该照片。
脚本是 http://valums.com/ajax-upload/
脚本的变量名称'qqfile'是硬编码的上传文件名,所以传递的参数是
qqfile=filename.jpg
在回形针中,我的图像对象被称为照片,所以回形针正在期待一个照片元素,我想!!!这就是造成我问题的原因。
我尝试了以下
1)在我的模型中,我尝试使用
将参数名称别名化为正确的对象名称alias_attribute :qqfile, :photo
但是当我这样做时,回形针实际上并没有保存模型。
我删除了alias_attribute并尝试在我的控制器中提供别名
def create new_photo = {photo: params[:qqfile]} @temp_photo = TempPhoto.new(new_photo); if @temp_photo.save return render :text => '{success:true}' else return render :text => '{success:false}' end end
通过此更改,模型将保存到数据库,但所有照片字段都为NULL。
任何明显我在这里做错了什么?
答案 0 :(得分:3)
最后我得到了解决这个问题的方法。这是一种常见的解决方案。首先下载the js code并将其保存为assets / javascripts中的 jquey.form.js 。包含在application.js中,如
//= require jquery.form
接下来是您的观点。这可能看起来像这样
<div id="image_view">
<%=image_tag @model.image_field.url %>
</div>
接下来是您上传图片的表单[您可以使用bootstrap modal呈现此表单。然后它会更漂亮]
<%=form_for @model, :html => { :multipart => true, :id => "form-id" }, :url => url_for(:controller => 'controller', :action => 'method_name') do | f | %>
Upload picture : <%= f.file_field image_field %>
<%= f.submit "Save changes", :id => :upload_pic %>
<% end %>
然后将一些javascript添加到表单呈现的文件
<script type="text/javascript">
$(document).ready(function(){
$('#upload_pic').click(function() {
$("#edit_form").ajaxForm({ target: "#image_view" }).submit();
return false;
});
});
</script>
控制器方法就像创建或更新方法
#image_view is just a div. where the response from ajax function can be loaded.
希望你们知道模型和Gemfile的外观。我想它可以帮助你。对于任何查询,请在同一个线程上发表评论。谢谢。