5

has_many:photosのPostモデルがあります。ユーザーが新しい投稿を作成している間、ユーザーは特定の投稿の写真を選択できる必要があります。

ガイドとして、RAILS 3.2.9、nested_form、carrierwave、jquery-fileupload-railsgemおよびryanbatesrailscastsを使用ています。

すべて正しく設定されているようですが、問題は、ユーザーが写真を選択すると(fileupload()関数がトリガーされる)、新しい投稿と新しい写真レコードが作成されることです。「投稿の作成」を押すと、別の投稿レコードが再び作成されます。

任意のヘルプ/アイデアをいただければ幸いです。

どうもありがとうございます。

Petr

class Post < ActiveRecord::Base
  has_many :photos, as: :attachable, :dependent => :destroy
  accepts_nested_attributes_for :photos, :allow_destroy => true
end

class Photo < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true
  attr_accessible :image, :description, :post_id, :attachable_id, :attachable_type
  mount_uploader :image, PhotoUploader
end


# Post Controller
def create
  @post = Post.new(params[:post])
  @post.save
end


# _form.html.erb
<%= nested_form_for @post, :html => { :multipart => true } do |f| %>
  <%= f.fields_for :photos do |photo| %>
    <% if photo.object.new_record? %>
      <%= photo.file_field :image, id: "fileupload" %>
      <%= photo.hidden_field :id %>
      <%= photo.hidden_field :attachable_id %>
      <%= photo.hidden_field :attachable_type %>
    <% else %>
      <%= image_tag(photo.object.image.url(:thumb)) %>
      <%= photo.check_box :_destroy %>
    <% end %>
  <% end %>
<% end %>

#application.js
$('#fileupload').fileupload();
4

1 に答える 1

5

https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload.js#L140

ファイルアップロードプラグインは、ファイルを選択するとすぐにAjax(投稿の作成)を介してフォームを送信します(ソースについてはリンクされたファイルを参照してください)。これにより、オブジェクトが選択されるとすぐにオブジェクトが作成されます。

なぜfileuploadプラグインが必要なのですか?AJAXを介して送信する必要はないため、ネストされたフォームだけで問題を解決できるはずです。通常のファイルフィールドでlink_to_addとlink_to_removeを使用するだけです。

編集:

ファイルフィールドプラグインを保持したい場合(そうしているようです)、それらを受信する方法が必要です。

これを行う最良の方法は、投稿ビューページ内で、投稿のネストされたフォーム内ではなく、写真のフォーム内にファイルアップロードコードをネストすることです。このようにして、すべての写真が写真作成オプションに投稿され、写真コントローラーでjavascriptコールバックを提供して、投稿フォームを非表示フィールドで更新し、この投稿にアップロードされたphoto_idを通知できます(明らかにこれを確保してください!)。

ユーザーが投稿フォームを作成する前にファイルをアップロードして受け入れるため、私は個人的にこのアプローチが好きではありません(つまり、ユーザーは離れて移動し、サーバー上に5〜10枚の写真を投稿に関連付けずに残すことができます)。 ..ただし、AJAX(別名ファイルアップロードプラグイン)を使用して写真をアップロードできるようにする場合は、必要な前提条件です。

これを行うための優れた方法はありません。ファイルのアップロード作業は通常面倒です。ファイルフィールドで動作し、複数のファイルフィールド入力セットを個々のファイルを含む非表示フィールドに変換できるjQueryプラグインを知りません。

于 2013-01-31T19:54:26.733 に答える