Ruby on rails 使用文件验证Rails模型
我已经被困在我的网站的某个特定部分好几天了,我感到非常沮丧。我有代码在用户的activerecord模型的logo=setter中上载用户的徽标(下面的代码),但这阻止了我使用模型的验证。有没有一种方法可以让我重新排列下面的代码,使它既“漂亮”,又允许我使用模型验证 谢谢 models/developer.rbRuby on rails 使用文件验证Rails模型,ruby-on-rails,ruby,models,Ruby On Rails,Ruby,Models,我已经被困在我的网站的某个特定部分好几天了,我感到非常沮丧。我有代码在用户的activerecord模型的logo=setter中上载用户的徽标(下面的代码),但这阻止了我使用模型的验证。有没有一种方法可以让我重新排列下面的代码,使它既“漂亮”,又允许我使用模型验证 谢谢 models/developer.rb require 'fileutils' class Developer < ActiveRecord::Base has_many :games has_many :user
require 'fileutils'
class Developer < ActiveRecord::Base
has_many :games
has_many :user_associations
has_many :users, :through=>:user_associations
validates_uniqueness_of :name
validates_length_of :name, :in=>4...16
#validates_filesize_of :logo, :in=>1.kilobytes..100.kilobytes, :message=>'Logo must be between 1 and 100 kilobytes'
def logo
@logo
end
def logo=(file)
errors.add_to_base('Image should be a PNG, JPEG or GIF file') and return if !(['.gif', '.jpg', '.jpeg', '.png'].include? File.extname(file.original_filename).downcase)
logo_format=File.extname(file.original_filename).downcase
image_path=RAILS_ROOT+'/logos/'+to_param
@logo=file.path
FileUtils.mv(file.path, image_path)
end
def self.fetch(id)
Developer.find_by_name(id.gsub(/_/, ' '))
end
def to_param
return name.gsub(/[ ]/, '_').downcase;
end
end
需要“fileutils”
类开发人员:user\u关联
验证名称的唯一性
验证:name,:in=>4…16的长度
#验证以下内容的文件大小:logo,:in=>1.KB..100.KB,:message=>“logo必须介于1和100 KB之间”
def标志
@标志
结束
def徽标=(文件)
错误。将_添加到_库(“图像应为PNG、JPEG或GIF文件”)并返回if!(['.gif'、'.jpg'、'.jpeg'、'.png'].include?File.extname(File.original_filename).downcase)
logo\u format=File.extname(File.original\u filename).downcase
image_path=RAILS_ROOT+/logos/'+to_param
@logo=file.path
mv(file.path,image\u路径)
结束
def self.fetch(id)
开发者。通过名称查找(id.gsub(/,“”))
结束
def至_参数
返回name.gsub(/[]/,''').downcase;
结束
结束
控制器/developer_controller.rb(相关位)
class DeveloperController'developers',:action=>'list'?
结束
def管理
结束
def set_标志
如果请求,请发邮件?还有!参数[:logo].nil?
@active_developer.logo=params[:logo]
@write=@active_developer.logo
@活动\u developer.save
结束
结束
私有的
def加载显影剂
如果!参数[:id].nil?
@active_developer=developer.fetch参数[:id]
其他的
@活动开发者=无
结束
结束
结束
您可能希望使用一个更强大的附件系统,而不是滚动您自己的附件系统,例如它可以为您完成所有这些。有一些方法可以验证文件类型、大小和许多其他内容,以及在需要此类内容时为您准备缩略图。您可能希望使用一个更健壮的附件系统,而不是滚动您自己的附件系统,例如它可以为您完成所有这一切。有一些方法可以验证文件类型、大小和许多其他内容,以及在需要此类内容时为您准备缩略图。您可能会混淆一些概念。正如上面提到的,一个现有的插件可能是最好的方法,也是一个很好的尝试。如果您确实决定推出自己的产品,您通常会:
- 将上载的文件保存到临时文件
- 记住在表单上有:html=>{:multipart=>true} :html => { :multipart => true }
- 在模型中创建一个属性(与数据库字段无关)以保存上载的文件数据(名称/临时文件位置)
- 验证后使用:保存文件附件(验证后运行)要将文件移动到正确位置,请将文件名放入徽标属性中
只是一些想法,我希望这能有所帮助。除非这是一个学习练习,否则请使用插件:)您可能会混淆一些概念。正如上面提到的,一个现有的插件可能是最好的方法,也是一个很好的尝试。如果您确实决定推出自己的产品,您通常会:
- 将上载的文件保存到临时文件
- 记住在表单上有:html=>{:multipart=>true} :html => { :multipart => true }
- 在模型中创建一个属性(与数据库字段无关)以保存上载的文件数据(名称/临时文件位置)
- 验证后使用:保存文件附件(验证后运行)要将文件移动到正确位置,请将文件名放入徽标属性中
只是一些想法,我希望这能有所帮助。除非这是一个学习练习,否则请使用一个插件:)谢谢,你太棒了,我爱你:验证后的D正是我想要的!谢谢,你真是太棒了,我爱你:D后验证正是我想要的! after_validation :save_file_attachment