我已经设置了这些强有力的参数:

def my_model_params
  params.require(:my_model).permit(:field)
end

但有时表单是空的,我会收到这样的错误:

缺少参数或值为空:MY_MODEL

在仍然使用强参数的情况下,如何允许表单为空?

推荐答案

使用fetch.

返回给定键的参数.如果找不到 keys , 有几种 Select :如果没有其他参数,它将引发 ActionController::参数未命中错误;如果第二个参数为 给出,然后返回该值(转换为 ActionController::参数(如果可能);如果给定块,则 它将运行并返回其结果.

def my_model_params
  params.fetch(:my_model, {})
        .permit(:field)
end

您希望使用超过params.permit(my_model: [ :field ])个实例的原因是,它总是返回ActionController::Parameters实例,而不是nil.

Ruby-on-rails相关问答推荐

如何测试自定义路由?

使用超级用户角色和未知密码创建与POSTRES用户的连接

Rails 6升级没有加载Mongoid,这是一个问题

Rails引擎importmap Uncaught ReferenceError:未定义tinymce

Rails 6:强类型原始 SQL 查询返回数组类型

API Rails 路由,令牌是路由的一部分

在bash中匹配带有空格字符的字符串

Ruby Sinatra Web 服务在 localhost:4567 上运行,但不在 IP 上

Rails 模型方法 self.与普通

在 Rails 的 ActiveRecord 中,touch 有什么用?

Ruby如何写入Tempfile

Rails Active Admin css 与 Twitter Bootstrap css 冲突

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

如何在 RSpec 中包含 Rails 助手

Rails 4,Capistrano 3.0.0,无法加载这样的文件 - 部署

Ruby on Rails:如何为 postgresql 编辑 database.yml?

在 Ruby on Rails 中的控制器中获取 URL 的锚部分

从模型中获取验证

简单的 rails rake 任务拒绝运行并出现错误不知道如何构建任务,为什么?

Rails.cache 在测试之间被清除了吗?