我一直在寻找一些例子,但已经很简单:
我正在尝试在我正在开展的项目上实现JQuery-File-Upload,但是如何让它处理嵌套属性,我失去了兴趣.
快速概述:
2型号:
Comment [has_many :attachments] Attachment [belongs_to :comment]
评论accept_nested_attributes_for:附件.另外 – 我正在使用蜻蜓.
我已经查看了JQuery文件上传站点上的Rails 3指南,但他们认为它是一个单一的模型,所以它都围绕一个窗体构建.有没有人有任何实施的例子,还是有一个现在的教程,我还没有偶然发现?
解决方法
我只想把我的答案放在这里,还有Stone的.我花了近两天的时间让这个工作(Stone是对的,这是一个PITA!),所以希望我的解决方案能帮助某人.我做的只是一个触摸不同于石头.
我的应用程序具有功能(漫画,拼图,文本列等)和FeatureAssets(单个漫画面板/彩色版本,特定填字游戏的问答文件等).由于FeatureAssets与一个功能完全相关,我嵌套了模型(如上图所示).
我最大的问题是意识到,我发送到服务器的params [:feature_asset]实际上是我的uploader’d文件对象的数组,而不是我习惯使用的那个.经过一点点的迭代,通过每个文件并创建一个FeatureAsset从它,它的工作就像一个魅力!
希望我会很清楚地翻译这个.我宁愿提供一些信息太多还不够.当你解释别人的代码时,一点额外的上下文从不伤害.
feature.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
功能_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>
它没有错误处理或其应有的任何优点,但这是它的准系统版本.
希望有帮助的人在那里.随时问我是否有任何问题!
凯尔