#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. Действительно. С уровня контроллера это достаточно безопасно. Но что, если мне придется вручную использовать этот метод на уровне модели? Я имею в виду, конечно, вы можете знать, какие параметры вам нужны от контроллера, но если у меня есть несколько мест, которые будут использовать этот метод, а некоторые параметры являются необязательными, тогда мне будет сложно все проверить. Вот почему я хочу ограничить параметры в определении метода.