新手问题 carrierwave 使用求解

jialezhang · 2012年07月31日 · 最后由 liker 回复于 2013年10月31日 · 3504 次阅读

1.rails new nana 2.cd nana=>rails g scaffold post name:string content:text 3.在Gemfile里面添加了 gem 'carrierwave' gem 'rmagick' gem 'mime-types' ====>bundle install 4.rails g uploader image 5.修改image_uplodaer.rb class AttachmentUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick include CarrierWave::MimeTypes

storage :file

def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end

process :set_content_type

version :thumb, :if => :image? do process :resize_to_fit => [50, 50] end

.....................

protected

def image?(new_file) new_file.content_type.include? 'image' end

end==============>抱歉暂时不会用区块 6.rails g model attach image:string content_type:string 7.attach.rb ==> mount_uploader :image, ImageUploader belongs_to :post 8.post.rb==> has_many :attach 9.views/posts/_form.html.erb==> <%= f.file.field :attach%> 10.修改下其他的东西,去创建时,报错 ActiveModel::MassAssignmentSecurity::Error in PostsController#create Can't mass-assign protected attributes: attach 不解,我都声明了belongs_to&&has_many怎么还是传不了啊

共收到 13 条回复

多行代码

ruby 代码 代码 `

Can't mass-assign protected attributes: attach 这个是说你的attach没有加到 attr_accessible里

#1楼 @Rei 哇靠,晚上看着这头像吓人,换个换个

#1楼 @Rei 谢啦,有木有关于,其他的解决?

#2楼 @ywencn 写错了,是Can't mass-assign protected attributes: image,image是attach里面的一个属性,但是我已经建立了表间关联了,应该是可以访问子类的属性的吧?如果加到post的attri_accessible里面的话,报错unknown attribute: image

#3楼 @ywencn 多美的哥特妹子

#4楼 @jialezhang

顶楼代码至少有4个问题

  1. image_uplodaer.rb 里面的类名叫 AttachmentUploader,命名不符合约定,会导致找不到类(后面又用ImageUploader)
  2. has_many 应该用复数 has_many :attachs
  3. Post 里面需要 attr_accessor :attachs
  4. 表单里面 f.file.field 应该是 f.file_field

即使上面的问题都纠正,也还是传不了的。因为 attach 不能接受一个文件参数,该接受文件的是 attach.image。

建议你先练习写一个表单创建 attach,然后看这个 api

http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

最后你可以考虑写写 js,动态添加多个 attach,或者用 jQuery-File-Upload 这样的插件。

#6楼 @Rei 1.先弱弱的问下,我把前面的修改完毕了,然后那个该接受参数的是attach.image,,我在post和attach之间建立了表的连接(如果那样写has_many.belongs_to没有问题的话),那我该怎么样写才能是在创立新的post实例的时候,把attach.image上传成功呢? 2.我乖乖的听从指导创建attach去

#6楼 @Rei 1.完成了carrierwave的实现图片上传,但是还是不懂为什么之前的没有成功,之前的区别仅仅在于我有了表间的关联,其他的都是一样的. 2.继续 jQuery-File-Upload

#8楼 @jialezhang 关联的对象的字段表单要用 fields_for

#10楼 @jialezhang 有 -rails 的那个只是原 jquery 插件的 assets pipeline 包装而已。

#11楼 @Rei 求问ruby-china是桌面处理缓存问题的哈,感觉论坛切换很快(应该不是服务器的问题吧)

怎么修改图片的名字,名字是uuid自动生成的。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册