0

私は ajax ファイル アップロード スクリプトを使用して写真をアップロードし、ペーパークリップを使用してその写真をレールで処理しています。

スクリプトは http://valums.com/ajax-upload/です

スクリプトには、アップロード ファイル名用にハードコードされた変数名「qqfile」があるため、渡されるパラメータは次のとおりです。

qqfile=filename.jpg

ペーパークリップでは、私の画像オブジェクトは写真と呼ばれているので、ペーパークリップは写真要素を期待していて、私は '!!think!!' これが私の問題の原因です。

私は次のことを試しました

1)私のモデルでは、パラメータ名を適切なオブジェクト名にエイリアスしようとしました

alias_attribute :qqfile, :photo

しかし、これを行うと、ペーパークリップは実際にはモデルをまったく保存しません。

alias_attribute を削除し、コントローラーでエイリアスを提供しようとしました

    デフォルト作成
    new_photo = {写真: params[:qqfile]}

    @temp_photo = TempPhoto.new(new_photo);
     @temp_photo.save の場合
        return render :text => '{success:true}'
     そうしないと
        return render :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 に答える