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
a.barbieri 3 août 2017 à 13:05

2 réponses

Meilleure réponse

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>
2
Simple Lime 3 août 2017 à 10:25

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
0
Pavel Mikhailyuk 3 août 2017 à 10:18