Rails: использование сильных параметров в качестве параметров ключевого слова

#ruby-on-rails #keyword-argument #ruby-3

#ruby-on-rails #ключевое слово-аргумент #ruby-3

Вопрос:

Допустим, у меня есть User модель с методом класса create_with_info . В настоящее время, если я хочу ввести пароль для параметров в метод, используя параметры ключевого слова, это будет что-то вроде этого.

 # user_controller.rb

def create_with_info
  User.create_with_info(**user_info_params)
end

private
def user_info_params
  params.require([:name, :age, :email])
  params.permit(:name, :age, :email).to_h.symbolize_keys
end

# user.rb

def self.create_with_info(name:, age:, email:)
  # do something
end
 

Я не уверен, правильно ли использовать параметры ключевых слов в контроллере или есть лучший способ обработки? использование to_h.symbolize_keys меня раздражает.

Комментарии:

1. почему вы хотите использовать symbolize_keys? вы можете использовать params.require(:user).permit(:name, :age, :email) в user_info_params . Затем User.create_with_info(user_info_params) и извлеките значения в self.create_with_info(user_info_params)

2. Это тот способ, которым мы пользовались раньше. Но, используя этот способ, вы можете видеть только то, какие параметры будут поступать внутрь в методе контроллера user_info_params . И user_info_params будет хэшем, который вы не сможете ограничить, если вызовете этот метод в консоли.

3. используя разрешение, вы уже ограничиваете использование 3 параметров

4. Действительно. С уровня контроллера это достаточно безопасно. Но что, если мне придется вручную использовать этот метод на уровне модели? Я имею в виду, конечно, вы можете знать, какие параметры вам нужны от контроллера, но если у меня есть несколько мест, которые будут использовать этот метод, а некоторые параметры являются необязательными, тогда мне будет сложно все проверить. Вот почему я хочу ограничить параметры в определении метода.