2014-06-21 10 views
6

Mam Upload klasy ActiveModel, która ma jeden atrybut: filename. Ponieważ istnieje tylko jeden atrybut, pozostawiając puste pole formularza kończy się podnoszenie błąd przy użyciu następującego kodu w moim kontrolera:Najlepszy sposób na radzenie sobie z brakującymi wymaganymi parametrami za pomocą StrongParameters?

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

    private 

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

Najlepszym obejście mam wymyślić ma rescue w metodzie upload_params np:

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

Alternatywnie, przypuszczam, że można dodać ukryte pole, aby upewnić się, że pole filename jest zawsze ustawiony na czymś nie wiem co, np:

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

Czy istnieje lepszy sposób obsługi użytkownika, który nie wypełnia żadnych atrybutów formularza?

Odpowiedz

7

Dane, które znajduję the answer natychmiast po opublikowaniu mojego pytania. :)

Wygląda metody ActionController::StrongParameters#fetch robi to, co jest potrzebne, np .:

params.fetch(:upload, {}).permit(:filename) 
Powiązane problemy