【发布时间】:2020-02-25 01:03:59
【问题描述】:
在我的 Rails 控制器中,我想需要一个参数,emails。它必须是一个数组。
这是允许的。
emails[]=foo@bar.com&emails[]=up@down.com
这是不允许的。
emails=foo@bar.com
params.require(:emails) 将允许两者。前者以数组的形式出现。后者作为字符串。这是个问题。
params.permit(emails: []) 不需要emails 参数。
params.require(:emails).permit([]) 不起作用,因为params.require(:emails) 变得聪明并返回一个数组,而不是 ActionController::Parameters。
如何允许emails[]=... 和禁止emails=...?
【问题讨论】:
-
Strong 参数主要关注筛选,不一定要做验证。如果您的强参数以正确的形式缺少
emails,您总是可以回退错误,甚至可以作为before_action处理程序执行此操作。 -
@tadman 我已经手动解决了这个问题。我问是因为
params.require(...).permit(...)可以很好地处理散列而不是数组,这似乎是一个奇怪的疏忽;我想我错过了一些东西。我找不到params.require(:thing) -> ActionController::Parameters与params.require(:things) -> Array的记录位置。
标签: ruby-on-rails strong-parameters ruby-on-rails-6