2011-09-24 59 views
2

如何验证我的文件字段的格式是否正确?Rails如何验证文件格式?

我想要图像字段验证它是一个.png,.jpg,.jpeg。

而且它有结束的FLV

的FLV等,它的扩展名为.MOV

而如何将影片做我创建的错误信息,告诉该字段是无效的。

我simple_form_for:

<%= f.input :name, :label => 'Navn', :required => true %><br /> 
<%= f.label :tekst %><br /> 
<%= f.text_area :text, :label => 'Text', :size => '12x12' %><br /> 
<%= f.label "Upload billede - kræves" %><br /> 
<%= f.input :image, :label => '', :required => true %><br /> 
<%= f.label "Upload flv - kræves" %><br /> 
<%= f.input :flv, :label => '', :required => true %><br /> 
<%= f.label "Upload Quicktime - kræves" %><br /> 
<%= f.input :quicktime, :label => '', :required => true %><br /> 
<%= f.button :submit, :value => 'Create movie' %> 

更新:

我必须弄清楚如何验证.MOV或.flv领域:

validates_format_of :flv, 
:with => %r{\.flv$}i, :message => "file must be in .flv format" 

validates_format_of :mov, 
:with => %r{\.mov$}i, :message => "file must be in .mov format" 

我只是鸵鸟政策有找到了验证图像的解决方案。

我的控制器:

def savenew 
    @photographer = Photographer.new(params[:photographer]) 
    @photographer.sort_order = Photographer.count + 1 

    if @photographer.save 
     redirect_to :action => 'list', :id => params[:id] 
     flash[:notice] = "Movie #{@photographer.name} is created" 
    else  
     render 'create', :id => params[:id]    
    end         
end   
+0

我不知道rails,所以留下来作为评论,但是这个链接可能有用:http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/38613644108f447a?fwc=1 –

+2

此外,我会建议删除有关文件*扩展*的东西。验证格式与验证扩展非常不同。 –

回答

9

如果你想继续与FLV和MOV,你可以这样做:

validates_format_of :image, :with => %r{\.(png|jpg|jpeg)$}i, :message => "whatever" 

请注意,这可能仅仅验证文件名会以特定的字符串结尾。这些不验证实际的文件是一个真正的PNG(或任何格式)。所以有人仍然可以上传一个带有扩展名“.png”的zip文件。

+0

现在,如果.mov和.flv都有效,并且图像无效,则会再次呈现该表单,但会显示所有错误消息。而不是只有图像的错误信息。我在我的问题中发布了我的控制器。为什么文件字段总是被清除?当它无效时。 –