ruby-on-rails - Rails 中强参数中的嵌套数组

标签 ruby-on-rails rspec strong-parameters

遇到一个奇怪的问题或错误。

我有一 strip 有强参数方法的路线:

def st_params
  params.permit([:id, logs: [], metric_ids: []])
end

然后我用例如 rspec 调用它:
post some_path(format:json, metric_ids:[ [1,0,1], [5,1,4] ])

当我调用 st_params 方法时,没有 metric_ids 参数,并且我在日志中收到消息:Unpermitted parameters: metric_ids

但是,如果我像这样更改 st_params 方法:
def st_params
  p = params.permit([:id, logs: [], metric_ids: []])
  p[:metric_ids] = params[:metric_ids]
  # or just p = params.permit!
  p
end

现在,在浏览器中一切正常,但看起来很奇怪。

但是在 rspec 中,我在任何情况下都收到了 metric_ids 的 nil 值:( 我没有找到有关该问题的任何信息。也许这里有人可以帮助我。

提前致谢。

最佳答案

2 件事可能会在这里引起您的麻烦:

1) 爆炸法permit!用于接受完整的参数散列,它不接受任何参数。我也不确定 permit!可以在整个params上调用hash,文档对此不清楚。

2) 您使用数组表示法可能会导致 params散列一些困惑。 (这也可能是可以接受的,但与我以前看到的相比看起来有点不正统。)我会写你的 st_params作为

def st_params
  params.permit(:id, :log, :metric_ids)
end

此外,像 metric_ids: [] 这样的许可参数正如您所写的,会将嵌套在 params[:metric_ids] 中的所有参数列入白名单。 ,根据您将数据传递给上述哈希的方式,我认为这不是您的预期用途。看来您正在这个哈希级别存储一个数组,并且没有进一步的复杂性,因此无需将超出此范围的参数列入白名单。

希望这可以帮助!

关于ruby-on-rails - Rails 中强参数中的嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524115/

相关文章:

mysql - 无法读取 MySQL 数据库中的外来字符(Xampp 和 Ruby on Rails)

ruby - 为什么在 RSpec 中弃用了负面的特定异常期望?

ruby - 引发 OpenURI::HTTPError 导致错误的参数数量错误

rspec - 预期 css "title"与 capybara 文本

ruby-on-rails-5 - Rails 5 - 强参数 : array of hashes

ruby-on-rails - CanCan load_and_authorize_resource 触发 Forbidden Attributes

ruby-on-rails - Rails 可以理解 GET 请求,但不能理解 POST 请求

ruby-on-rails - Rails 4强参数无必填参数

ruby-on-rails - Rails - session 无法通过 AJAX 登录?

ruby-on-rails - 为什么 Rails 中的强参数顺序很重要?