【问题标题】:Edit a strong param if it's present?如果存在,请编辑强参数?
【发布时间】:2021-03-30 00:36:36
【问题描述】:

如何有条件地编辑强参数?例如,我有以下编辑强参数(国家)。它做了一些简单的事情;将其从长更改为短,例如“美国”到“美国”。

def user_params
  params.require(:user).permit(:user_id, :first_name, :last_name, :country, :currency).tap do |user_params|
    user_params[:country] = full_list_countries[params[:user][:country].to_sym]
  end
end

问题是,只要:country 不存在,它就会出错。

无论:country 是否存在,我怎样才能让代码正常工作?

【问题讨论】:

  • 您遇到的错误是什么?
  • @Turtlean 我想通了。我指的是user_params inside user_params。这是一个非常糟糕的主意(递归函数,CPU 几乎立即达到 100%,粉丝也是)
  • 哈哈,有道理。好的,那对你有好处!

标签: ruby-on-rails ruby-on-rails-6 strong-parameters


【解决方案1】:

使用if params[:country].present? 确定参数是否存在并进行相应处理。

注意不要尝试使用if user_params[:country].present?,这会导致递归函数和无限循环,这将导致你的CPU最大化!

def user_params
  if params[:country].present?
    params.require(:user).permit(:user_id, :first_name, :last_name, :country, :currency).tap do |user_params|
      user_params[:country] = full_list_countries[params[:user][:country].to_sym]
    end
  else
    params.require(:user).permit(:user_id, :first_name, :last_name, :country, :currency)
  end
end

【讨论】:

  • 应该是if params[:user] && params[:user][:country].present?
猜你喜欢
  • 2018-01-29
  • 1970-01-01
  • 2013-06-18
  • 2010-09-20
  • 2017-07-14
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多