0

我正在使用 ajax 文件上传脚本上传照片并使用回形针在 rails 中处理该照片。

该脚本是 http://valums.com/ajax-upload/

该脚本有一个为上传文件名硬编码的变量名“qqfile”,因此传递的参数是

qqfile=filename.jpg

在回形针中,我的图像对象称为照片,所以回形针期待一个照片元素,我“!!想!!” 这就是导致我的问题的原因。

我试过以下

1)在我的模型中,我尝试将参数名称别名为正确的对象名称

alias_attribute :qqfile, :photo

但是当我这样做时,回形针实际上根本没有保存模型。

我删除了 alias_attribute 并尝试在我的控制器中提供别名

    定义创建
    new_photo = {照片:参数[:qqfile]}

    @temp_photo = TempPhoto.new(new_photo);
     如果@temp_photo.save
        返回渲染 :text => '{success:true}'
     别的
        返回渲染 :text => '{success:false}'
     结尾
    结尾

通过此更改,模型将保存到数据库中,但所有照片字段均为 NULL。

有什么明显的我在这里做错了吗?

4

1 回答 1

3

最后我得到了解决这个问题的方法。这是一个常见的解决方案。首先下载js代码并将其保存为assets/javascripts中的jquey.form.js。包含在 application.js 中,例如

//= require jquery.form

接下来是你的看法。这可能看起来像这样

<div id="image_view">
  <%=image_tag @model.image_field.url %>
</div>

接下来是您上传图片的表单[您可以使用引导模式来呈现此表单。然后会更漂亮]

<%=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 的样子。我想它可以帮助你。如有任何疑问,请在同一线程上发表评论。谢谢你。

于 2013-01-07T09:09:07.693 回答