ruby-on-rails – Rails 3 JQuery文件上传嵌套模型

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails 3 JQuery文件上传嵌套模型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在寻找一些例子,但已经很简单:

我正在尝试在我正在开展的项目上实现JQuery-File-Upload,但是如何让它处理嵌套属性,我失去了兴趣.

快速概述:

2型号:

Comment [has_many :attachments]
Attachment [belongs_to :comment]

评论accept_nested_attributes_for:附件.另外 – 我正在使用蜻蜓.

我已经查看了JQuery文件上传站点上的Rails 3指南,但他们认为它是一个单一的模型,所以它都围绕一个窗体构建.有没有人有任何实施的例子,还是有一个现在的教程,我还没有偶然发现?

我确定有人有类似的问题… JQuery文件上传到适当的工具,还是应该看别的东西?

解决方法

我只想把我的答案放在这里,还有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>

它没有错误处理或其应有的任何优点,但这是它的准系统版本.

希望有帮助的人在那里.随时问我是否有任何问题!

凯尔

原文链接:https://www.f2er.com/ruby/271665.html

猜你在找的Ruby相关文章