2014-06-21 14 views
6

Ich habe eine Upload ActiveModel-Klasse mit einem Attribut: filename. Da gibt es nur ein Attribut, das Feld leer ließ auf dem Formular, um eine Fehler Erhöhung endet, wenn mit dem folgenden Code in meinem Controller:Der beste Weg, um fehlende Params mit StrongParameters zu umgehen?

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

    private 

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

Die beste Abhilfe, die ich habe kommen mit zu rescue im upload_params Verfahren zB:

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

Alternativ nehme ich mich ein verstecktes Feld, dass das filename Feld etwas immer, egal was gesetzt, um sicherzustellen, könnte hinzufügen, zum Beispiel:

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

Gibt es eine bessere Möglichkeit, den Benutzer nicht mit den Formularattributen auszufüllen?

Antwort

7

Zahlen, die ich sofort nach dem Stellen meiner Frage the answer finde. :)

Es ist wie die ActionController::StrongParameters#fetch Methode sieht das tut, was gebraucht wird, z.B .:

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