我是回形针宝石的新手,所以请原谅我,但我已经花了两个小时的大部分时间在这上面,但没有任何进展(我已经观看了它的轨道广播):
我的 Rails 应用程序有一个带有回形针附件的模型:
class Foo::Bar < ActiveRecord::Base
attr_protected :id
has_attached_file :mydocument
end
Run Code Online (Sandbox Code Playgroud)
每当我尝试提交带有此附件的空白文件字段的表单时,我都会收到以下错误:
Paperclip::AdapterRegistry::NoHandlerError: No handler found for ""
Run Code Online (Sandbox Code Playgroud)
我是什么做的?(我安装了 ImageMagick 并在我的环境文件中指定Paperclip.options[:command_path] = 'C:\Program Files\ImageMagick-6.8.4-Q16',但我认为这在这种情况下应该会有所不同。)
我已卸载并重新安装回形针。我已经重新启动了计算机。我在同事的计算机上运行该应用程序,但没有收到错误。但在我的机器上,我仍然收到错误。
有没有办法将回形针附件设为私有?就像我明确希望用户能够访问文件的地方一样,用户可以访问该文件.
显然该文件不能在公共目录中,但是如何在尝试访问该文件时检查用户的访问权限?
我已经安装了Paperclip插件,试图上传我的kase模型的头像.由于某种原因,选择文件按钮显示,我可以选择一个文件 - 但是当我点击更新kase时 - 它将我带到显示页面,但是miss.png而不是所选图像.
kase.rb
class Kase < ActiveRecord::Base
def self.all_latest
find(:all, :order => 'created_at DESC', :limit => 5)
end
def self.search(search, page)
paginate :per_page => 5, :page => page,
:conditions => ['name like ?', "%#{search}%"],
:order => 'name'
end
# Paperclip
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end
Run Code Online (Sandbox Code Playgroud)
kases_controller.rb
# GET /kases/new
# GET /kases/new.xml
def new
@kase = Kase.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @kase …Run Code Online (Sandbox Code Playgroud) 我正在使用dragonfly gem来管理我的rails应用程序中的图像和附件,我需要根据我的用户模型将图像存储在特定的目录结构中.让我说我的用户模型有一个名字,每个用户有很多专辑,也有一个名字,然后我希望图像存储在 "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"
我设法改变了龙飞的root_path,我甚至覆盖了relative_storage_path,如下所示:
class MyDataStore < Dragonfly::DataStorage::FileDataStore
private
def relative_storage_path(suffix)
"#{suffix}"
end
end
Run Code Online (Sandbox Code Playgroud)
但尽管如此,我不知道我怎么可以通过ActiveRecord的对象属性,如user.name和user.album.name以relative_storage_path
创建我的理想路径.
你知道我怎么做这样的事吗?
我正在使用回形针将文件附加到我的模型中.我想要做的是,在保存模型并将文件写入磁盘后,我需要更新模型中关于文件的另一个属性(CRC).由于回形针在调用.save之后才将文件写入磁盘,我首先想到的是使用after_save回调.当我这样做时,我得到一个"SystemStackError(堆栈级别太深):"错误.然后我尝试做一个after_commit回调,似乎工作得更好一点.例如,如果我只是给我的crc分配:
self.crc = "TEST"
self.save
Run Code Online (Sandbox Code Playgroud)
这有效.但是,如果我尝试做我的真实作业,请使用:
self.crc = "0x" + IO.read(self.patchfile.path, 4, 0x20).unpack("H8").join
self.save
Run Code Online (Sandbox Code Playgroud)
WEBrick中止:
/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(+0x180048) [0x290048]
/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(rb_yield+0x56) [0x294c46]
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
Aborted
Run Code Online (Sandbox Code Playgroud)
所以我在想我做错了......
我正在寻找一种使用Rails Admin在一个模型上拥有多个附件的简单方法.我已经将Paperclip工作了,但我需要多个图像,而不仅仅是一个.
任何提示/想法/链接?
非常感谢你!
奥勒
attachment-fu ruby-on-rails paperclip carrierwave rails-admin
所以我正在使用载波直接,我正处于需要更新上传器对象的"key"属性的位置.这是文档中的相关行:
上传到S3后,您需要使用与new_user_url对应的控制器操作中返回的密钥更新上传器对象:
@uploader.update_attribute :key, params[:key]
Run Code Online (Sandbox Code Playgroud)
问题是我的@uploader对象没有update_attribute方法.实际上,当我查看@uploader对象上的所有方法时,我看到的方法如key()和key =(),但没有update_attribute.
知道发生了什么事吗?我是否错过了为使update_attribute方法可用而需要执行的一些设置步骤?
我希望能够使用Active_admin中的formtastic删除编辑表单中的图像.有很多关于此的帖子,但由于某些原因我似乎无法使其符合我的设置.
我有一个Post模型和一个NewsImages模型,其中包含每个帖子的图像:
class Post < ActiveRecord::Base
has_many :news_images, dependent: :destroy
accepts_nested_attributes_for :news_images, allow_destroy: true
end
class NewsImage < ActiveRecord::Base
belongs_to :post
has_attached_file :photo
end
Run Code Online (Sandbox Code Playgroud)
因此,根据我所读的内容,可以将一个标志添加到我的NewsImage模型中,并使用之前的保存方法来删除该图像.我设想它看起来像这样,但单击复选框时不会删除图像.
#/admin/post.rb
f.has_many :news_images do |p|
if p.object.new_record?
p.input :photo, as: :file
else
p.input :photo, as: :file, :hint => p.template.image_tag(p.object.photo.url(:thumb))
p.input :remove_image, as: :boolean, required: :false, label: 'Remove image'
end
end
Run Code Online (Sandbox Code Playgroud)
在此阶段我在控制台中注意到的一点是,当单击进出复选框时,它的值不会更改为选中或取消选中; 应该是吗?
NewsImage模型现在看起来像
class NewsImage < ActiveRecord::Base
before_save :remove_photo
belongs_to :post
private
def remove_photo
self.photo.destroy if self.remove_image == '1'
end
end …Run Code Online (Sandbox Code Playgroud) 我想根据自己的需要删除上传文件的内容类型限制.我试过这个:
validates_attachment_content_type :attachment, :content_type => ['/\Aimage\/.*\Z/', 'application/*']
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我应该做些什么来允许所有文件类型上传?
谢谢.
我有一个使用这些宝石的Rails 3应用程序:
gem 'paperclip'
gem 'wicked_pdf'
gem 'combine_pdf'
Run Code Online (Sandbox Code Playgroud)
我正在用wicked_pdf一个pdf打开costproject.该costproject有所谓的HTML页面viewproject.pdf.erb.
我正在尝试将邪恶的pdf与costproject附件合并为一个pdf.
这是我的控制器代码:
def viewproject
@costproject = Costproject.find(params[:costproject_id])
respond_to do |format|
format.html
format.pdf do
pdf = CombinePDF.new
pdf2 = render_to_string pdf: "Costproject.pdf", template: "costprojects/viewproject", encoding: "UTF-8"
pdf << CombinePDF.new(pdf2)
@costproject.attachments.each do |attachment|
pdf << CombinePDF.new(attachment.attach.path)
end
send_data pdf.to_pdf, :disposition => 'inline', :type => "application/pdf"
end
end
end
Run Code Online (Sandbox Code Playgroud)
这条线pdf << CombinePDF.new(pdf2)给了我:
string contains null byte
Run Code Online (Sandbox Code Playgroud)
如果我看一下pdf2,就会这样开始 - 所以它看起来像一个pdf:
>> pdf2
=> "%PDF-1.4\n1 0 …Run Code Online (Sandbox Code Playgroud) paperclip ×10
ruby-on-rails ×10
ruby ×3
carrierwave ×2
activeadmin ×1
amazon-s3 ×1
file-upload ×1
formtastic ×1
image ×1
rails-admin ×1
wicked-pdf ×1