Comment puis-je ajouter des paramètres forts à mon contrôleur à l'aide d'un fichier de préoccupation?
Disons que j'ai :name, :age, :sex
paramètres qui sont utilisés par plusieurs contrôleurs, mon idée est de créer un module de préoccupation où je stocke ces common_params
et les ajoute aux paramètres autorisés comme j'essaye vaguement de le faire ici au dessous de.
Manette
class PersonController < ApplicationController
include CommonHelper
def update
@person.create(person_params)
end
private
def person_params
params.require(:person).permit(:foo, :bar, common_params)
end
end
Préoccupation
module CommonHelper
extend ActiveSupport::Concern
def common_params
{ :name, :age, :sex }
end
end
Idéalement, je devrais obtenir le même résultat que si je faisais: permit(:foo, :bar, :name, :age, :sex)
.
2 réponses
Vous pouvez utiliser l'opérateur *
, qui divise le tableau en une liste de paramètres et peut être inclus dans une liste de paramètres existante:
params= ActionController::Parameters.new(person: {foo: 'something', bar: 'something else', name: 'Someone', age: 27, sex: 'M', random: 'not valid'})
# however you want to define and include these (method, constant, etc)
def common_params
[:name, :age, :sex]
end
params.require(:person).permit(:foo, :bar, *common_params)
# => <ActionController::Parameters {"foo"=>"something", "bar"=>"something else", "name"=>"Someone", "age"=>27, "sex"=>"M"} permitted: true>
Préoccupation
module CommonHelper
COMMON_PARAMS = %i[ name age sex ].freeze
end
Manette
def person_params
params
.require(:person)
.permit([:foo, :bar] | CommonHelper::COMMON_PARAMS)
end
De nouvelles questions
ruby
Ruby est un langage interprété orienté objet dynamique et open source multi-plateforme. La balise [ruby] est destinée aux questions liées au langage Ruby, y compris sa syntaxe et ses bibliothèques. Les questions Ruby on Rails doivent être marquées avec [ruby-on-rails].