2017-10-09 4 views
-1

Je souhaite que mon serveur mette à jour un paramètre de modèle (layout_is_public) lorsqu'une action de mise à jour de contrôleur est appelée. Le paramètre ne doit pas être mis à jour directement par les utilisateurs.Comment ajouter des paramètres forts personnalisés dans les rails 5

Mon contrôleur fort params:

def allowed_params 
    params.require(:payload).permit(:name, :layout_id) 
end 

Mon before_action dans le même contrôleur:

def correct_layout 
    if allowed_params[:layout_id].present? 
    puts allowed_params.merge(layout_is_public: false).inspect 

    # puts output is as expected: 
    # => <ActionController::Parameters {"layout_id"=>1, "layout_is_public"=>false} permitted: true> 

    allowed_params = allowed_params.merge(layout_is_public: false) 
    end 
end 

Je ne sais pas comment mettre à jour mes allowed_params pour inclure le paramètre nouvellement généré bien.

Je ne suis pas sûr non plus si cette action devrait vraiment être effectuée dans le contrôleur ou le modèle lui-même. Toute aide serait grandement appréciée :)

Note: La variable layout_is_public est simplement mise à false ici pour plus de clarté.

Répondre

0

vous pouvez éventuellement aussi essayer ceci: -

private 

def allowed_params 
    ap = params.require(:payload).permit(:name, :layout_id) 
    ap[:layout_is_public] = 'false' if params[:payload][:layout_id].present? 
    ap 
end 
0

Vous ne pouvez pas affecter directement le paramètre fort. Affectez-le à variable et fusionnez le paramètre.

def correct_layout 
     if allowed_params[:layout_id].present? 
     puts allowed_params.merge(layout_is_public: false).inspect 
     # puts output is as expected: 
     # => <ActionController::Parameters {"layout_id"=>1, layout_is_public"=>false} permitted: true> 
     allowed = allowed_params 
     allowed_params = allowed.merge(layout_is_public: false) 
     end 
    end