ストーンの答えと同様に、ここに私の答えを入れたかっただけです。私はこれを機能させるのに2日近く費やしました(Stoneは正しかった、それはPITAでした!)ので、私の解決策が誰かを助けることを願っています. ストーンとは少し違うだけでした。
私のアプリにはFeatures
、(コミック、パズル、テキスト コラムなど) とFeatureAssets
(個々のコミック パネル/カラー バージョン、特定のクロスワードの Q&A ファイルなど) があります。FeatureAssets
は 1 つの のみに関連しているためFeature
、モデルをネストしました (アップロード フォームで確認できます)。
params[:feature_asset]
私にとっての最大の問題は、サーバーに送信されていたものが、私が慣れ親しんでいたものではなく、実際にはアップローダfile
のオブジェクトの配列であることに気付いたことでした。各ファイルを繰り返し処理し、そこから FeatureAsset を作成することを少しいじった後、それは魔法のように機能しました!
うまくいけば、私はこれを明確に翻訳します。十分な情報を提供しないよりも、少し多すぎる情報を提供したいと思います。他の誰かのコードを解釈しているときに、少し余分なコンテキストが問題になることはありません。
機能.rb
class Feature < ActiveRecord::Base
belongs_to :user
has_many :feature_assets
attr_accessible :name, :description, :user_id, :image
accepts_nested_attributes_for :feature_assets, :allow_destroy => true
validates :name, :presence => true
validates :user_id, :presence => true
mount_uploader :image, FeatureImageUploader
end
feature_asset.rb
belongs_to :user
belongs_to :feature
attr_accessible :user_id, :feature_id, :file, :file_cache
validates :user_id, :presence => true
validates :feature_id, :presence => true
validates :file, :presence => true
mount_uploader :file, FeatureAssetContentUploader
# grabs useful file attributes & sends them as JSON to the jQuery file uploader
def to_jq_upload
{
"file" => file,
"file_name" => 'asdf',
"url" => file.url,
"delete_url" => id,
"delete_type" => "DELETE"
}
end
feature_assets_controller.rb
def create
@feature = Feature.find(params[:feature_id])
params[:feature_asset]['file'].each do |f|
@feature_asset = FeatureAsset.create!(:file => f, :feature_id => @feature.id, :user_id => current_user.id)
end
redirect_to @feature
end
おそらくそれほど役立つわけではありませんが、私の feature_asset_uploader.rb は以下にあります。かなり削ぎ落とされています。
class FeatureAssetContentUploader < CarrierWave::Uploader::Base
storage :file
end
features _form.html.erb (Stoneのものに似ていますが、完全ではありません)
<%= form_for [@feature, @feature_asset], :html => { :multipart => true } do |f| %>
<div class="row" id="fileupload">
<div class=" fileupload-buttonbar">
<div class="progressbar fileupload-progressbar nofade"><div style="width:0%;"></div></div>
<span class="btn btn-primary fileinput-button">
<i class="icon-plus"></i>
<span><%= t('feature_assets.add_files') %>...</span>
<%= hidden_field_tag :feature_id, @feature.id %>
<%= hidden_field_tag :user_id, current_user.id %>
<%= f.file_field :file, :multiple => true %>
</span>
<button type="submit" class="btn btn-success">Start Upload</button>
<button type="reset" class="btn btn-warning">Cancel Upload</button>
<button type="button" class="btn btn-danger">Delete Files</button>
</div>
</div>
エラー処理や必要な機能はありませんが、それはベアボーン バージョンです。
うまくいけば、それが誰かを助けるでしょう。ご不明な点がございましたら、お気軽にお問い合わせください。
カイル