ruby-on-rails – Rails 4 – Carrierwave图像无法上传
更新:感谢大家帮助我们解决这个问题.我决定放弃尝试学习并为配置文件模型添加另一个图像属性.这将是现在必须做的.
我试图在rails 4中制作应用程序. 我有一个用户模型,上面有一个头像属性. 我也有个人资料模型. 用户:有一个个人资料 我拆分它们的原因是因为配置文件包含所有变量,而用户包含所有未经管理员权限无法更改的固定属性. 例外是我的用户模型具有我想允许用户更改的头像(图像)属性. 我在我的代码的其他部分有用户carrierwave,它的工作原理.但是,这个用例有些不对劲. 我有一个头像上传者: class AvatarUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: # include CarrierWave::RMagick include CarrierWave::MiniMagick # Choose what kind of storage to use for this uploader: # storage :file storage :fog # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def cache_dir "#{Rails.root}/tmp/uploads" end # Provide a default URL as a default if there hasn't been a file uploaded: # def default_url # # For Rails 3.1+ asset pipeline compatibility: # # ActionController::Base.helpers.asset_path("fallback/" + [version_name,"default.png"].compact.join('_')) # # "/images/fallback/" + [version_name,"default.png"].compact.join('_') # end # Process files as they are uploaded: # process :scale => [200,300] # # def scale(width,height) # # do something # end # Create different versions of your uploaded files: # version :thumb do # process :resize_to_fit => [50,50] # end process :resize_to_fit => [800,800] # Create different versions of your uploaded files: version :thumb do process :resize_to_fill => [200,200] end version :profile do process :resize_to_fill => [345,245] end version :wide do process :resize_to_fill => [951,245] end version :preview do process :resize_to_fill => [90,90] end version :small do process :resize_to_fill => [35,35] end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: def extension_white_list %w(jpg jpeg gif png) end # Override the filename of the uploaded files: # Avoid using model.id or version_name here,see uploader/store.rb for details. # def filename # "something.jpg" if original_filename # end end 在我的用户模型中,我有: class User < ActiveRecord::Base mount_uploader :avatar,AvatarUploader end 在我的用户控制器中 – 我将强化参数中的头像列入白名单. 在我的个人资料控制器强大的params我试过添加: params.require(:profile).permit(:title,:overview,user_attributes: [:avatar]) 我还尝试在我的个人资料模型中允许用户属性(如下所示): belongs_to :user accepts_nested_attributes_for :user 我的视图用户文件夹中有一个部分表单. <%= simple_fields_for :user,html: { multipart: true } do |f| %> <%= f.error_notification %> <div class="form-inputs"> <%= f.input :avatar,as: :file,:label => "Add a profile image (head shot)" %> </div> <% end %> 部分内容包含在我的个人资料表格中. 然后我想在我的个人资料显示视图中显示用户头像: <div class="col-md-5 col-lg-4 vc-photo" style= "background-image: url(<%= image_url @profile.user.avatar.url if @profile.user.avatar? %>);"> </div> 但是,它只是呈现一个空白. 我试过了: );“> 但它仍然只是呈现空白. 谁能看到我做错了什么? 当我尝试通过检查user.avatar在rails控制台中测试时,我得到了这个: u.avatar 采取以下建议 我更改了表单,以便配置文件表单现在具有: <%= render 'users/profileimgform',f: f %> users / profileimgform现在具有: <%= simple_fields_for :user,html: { multipart: true } do |ff| %> <%= f.error_notification %> <div class="form-inputs"> <%= ff.input :avatar,:label => "Add a profile image (head shot)" %> </div> <% end %> 我不确定是否需要在我的个人资料表格中将’ff’纳入该行.我尝试用’ff’替换最后的’f’,但是错误地询问我是否应该是单个’f’. 当我尝试这个时,控制台仍然显示user.avatar是’nil’. 解决方法
我猜这段代码有错误:
<%= simple_fields_for :user,:label => "Add a profile image (head shot)" %> </div> <% end %> 看看生成的html.我认为应该是这样的: <%= simple_form_for :profile do |f| %> ... <%= f.simple_fields_for :user do |ff| %> <%= ff.input :avatar %> <% end %> <% end %> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |