Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用文件验证Rails模型_Ruby On Rails_Ruby_Models - Fatal编程技术网

Ruby on rails 使用文件验证Rails模型

Ruby 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

我已经被困在我的网站的某个特定部分好几天了,我感到非常沮丧。我有代码在用户的activerecord模型的logo=setter中上载用户的徽标(下面的代码),但这阻止了我使用模型的验证。有没有一种方法可以让我重新排列下面的代码,使它既“漂亮”,又允许我使用模型验证

谢谢

models/developer.rb

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