2014-06-21 11 views
6

Ho una classe Upload ActiveModel che ha un attributo: filename. Dal momento che non c'è un solo attributo, lasciando vuoto il campo nel modulo finisce per sollevare un errore quando si utilizza il seguente codice nel mio controller:Il modo migliore per gestire i parametri richiesti mancanti con StrongParameters?

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

    private 

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

La soluzione migliore che è venuta in mente è quello di rescue nel metodo upload_params , ad esempio:

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

In alternativa, suppongo che avrei potuto aggiungere un campo nascosto per garantire che il campo filename è sempre impostato su qualcosa di non importa cosa, ad esempio:

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

C'è un modo migliore di gestire l'utente non compilando nessuno degli attributi del modulo?

risposta

7

Figure che trovo the answer subito dopo aver postato la mia domanda. :)

Sembra che il metodo fa ciò che è necessario, per es .: ActionController::StrongParameters#fetch

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