gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:39:01 26 4
gpt4 key购买 nike

我一直在寻找一些例子,但很短:

我正在尝试在我正在处理的项目上实现 JQuery-File-Upload,但我对如何让它与嵌套属性一起工作感到迷茫。

快速概览:

2 型号:

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

评论 accepts_nested_attributes_for :attachments .另外 - 我正在使用蜻蜓。

我在 JQuery-File-Upload 站点上查看了 Rails 3 指南,但他们认为它是一个单一的模型,所以它都是围绕一个表单构建的。有没有人有任何实现的示例,或者是否有我尚未偶然发现的现有教程?

我确定有人遇到过类似的问题......是 JQuery-File-Upload 到适当的工具还是我应该看看其他东西?

最佳答案

我只是想把我的答案和斯通的答案都扔在这里。我花了将近两天的时间来让它工作(斯通是对的,这是一个 PITA!),所以希望我的解决方案能帮助别人。我做的只是与斯通不同。

我的应用有 Features (漫画、拼图、文本栏等)和 FeatureAssets (个人漫画面板/彩色版本,特定填字游戏的问答文件等)。自 FeatureAssets仅与一个 Feature 相关,我嵌套了模型(正如您在我的上传表单中看到的那样)。

对我来说最大的问题是意识到我的 params[:feature_asset]发送到服务器的实际上是我上传者的数组 file对象,而不仅仅是我习惯使用的对象。在对每个文件进行迭代并从中创建一个 FeatureAsset 之后,它就像一个魅力一样工作!

希望我能把这个翻译清楚。我宁愿提供过多的信息也不愿提供足够的信息。当你解释别人的代码时,一点额外的上下文永远不会受到伤害。

特征文件

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

特征 Assets .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>

它没有错误处理或它应该具有的任何细节,但这是它的准系统版本。

希望这可以帮助那里的人。如果您有任何问题,请随时问我!

凯尔

关于ruby-on-rails - Rails 3 + JQuery 文件上传 + 嵌套模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9357607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com