Rails 强参数 - 如果我的字段之一是可选的怎么办?

Rails Strong Parameters - what if one of my fields is optional?

无论如何我都不会声称自己是 Rails 方面的专家。令我困惑的一件事是强参数,我没有找到任何真正简单的教程,大部分搜索结果都是 rails 文档的命中率,虽然通常是准确的,但我不找不到任何易于阅读的方式,不能被视为教程。强参数的 github 似乎也没有涵盖这一点。

假设我有一个名为 "Resource" 的实体。

class ResourcesController < ApplicationController
  ...
  def create
    @resource = Resource.new(resource_params)
    if @resource.save
      ...
      respond_with(@resource.level)
    else
      ...
    end
  end

  def update
    if @resource.update(resource_params)
      ...
      respond_with(@resource.level)
    else
      ...
    end
  end
  ...
  def resource_params
    params.require(:resource).permit(:name, :url, :description, :level_id)
  end
end

假设我有一个显示名称、url、描述和 level_id 字段的脚手架表单。所有字段都是必填的。我不知道如何修改 resource_params 函数以确保名称、url 和 level_id 在更新(或创建)资源时是强制性的,但该描述是可选的(但应该仍然被允许)。

我试过从 require 行中删除描述,并将其添加到单独的行中作为 params.permit(:description) 但这没有任何区别,该字段在表单中仍然是强制性的。

欢迎就此提供任何帮助!

我觉得你应该考虑一下 :on http://guides.rubyonrails.org/active_record_validations.html#on

validates :email, uniqueness: true, on: :create

它只对指定的操作启用验证。

强参数用于确保没有其他数据可以传递到您的对象中,即 no1 可以插入不需要的数据。例如,如果您有实体 User 并且它有字段 admin 如果它为真,则用户具有管理员角色,则不能使用控制器内的创建或更新方法进行设置,因为 some1 可以将任何类型的参数发送到您的控制器,并且您想过滤它们(仅允许特定参数)。

这并不意味着如果您将某些内容放入强参数中,则它是创建、更新或其他操作所必需的。强参数仅用于过滤数据,并且仅允许通过此服务或 REST 设置实体的某些部分。如果您发送的参数不是强参数定义的,在您的服务器 console/log 中将会有 unpermited parameters: list of the parameters.

正如我所说,这与强参数无关。您只需删除该字段的 required: true 即可使其成为可选字段。