2011-09-24 61 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都有效,並且圖像無效,則會再次呈現該表單,但會顯示所有錯誤消息。而不是隻有圖像的錯誤信息。我在我的問題中發佈了我的控制器。爲什麼文件字段總是被清除?當它無效時。 –