2014-06-21 59 views
6

我有一個Upload ActiveModel類,它有一個屬性:filename。由於只有一個屬性,使該字段爲空的形式結束了在我的控制器使用下面的代碼時產生錯誤:使用StrongParameters處理缺少所需參數的最佳方法?

class UploadsController < ApplicationController 
    def create 
    @upload = Upload.new(upload_params) 
    # ... 
    end 

    private 

    def upload_params 
    params.require(:upload).permit(:filename) 
    end 
end 

我拿出最好的解決方法是rescueupload_params方法如:

def upload_params 
    params.require(:upload).permit(:filename) rescue ActionController::Parameters.new 
end 

另外,我想我可以添加一個隱藏字段,以確保filename場總是被設置的東西不管是什麼,例如:

= simple_form_for upload do |f| 
    = f.input :filename, as: :hidden, input_html: { value: '' } 
    = f.input :filename, as: :file 
    = f.submit 'Upload' 

有沒有更好的方式來處理用戶不填寫任何表單屬性?

回答

7

數字,我發現我的問題後立即the answer。 :)

它看起來像ActionController::StrongParameters#fetch方法做什麼需要,例如:

params.fetch(:upload, {}).permit(:filename)