需要嵌套参数

Require nested params

我有一个 Rails 服务器和 RESTful API 允许创建 "communities" 和 "users"。

要创建一个社区,我 POST 一个 JSON 这样的:

{
    "community": {
        "name": "community name"
    }
}

/api/v1/communities。问题是 "name" 必须是强制性的,所以如果在 CommunitiesController 中我这样做...

def community_params
    params.require(:community).permit(:name)
end

...缺少名称,用户可以创建没有名称的社区。

我想强制 "name" 的存在。我试过了

def community_params
    params.require(:community)
    params.require(community: [ :name ])
end

但我得到

ActionController::ParameterMissing in Api::V1::CommunitiesController#create param is missing or the value is empty: {:community=>[:name]}

Request

Parameters:

{"community"=>{"name"=>"community name"}}

我怎样才能强制出现一个非空的名称值?

提前致谢

您应该在模型中使用验证而不是 strong params 功能:

validates_presence_of :name

strong params 仅检查您的参数的层次结构并防止质量分配。

我会在这里冒险并假设您正在使用表单提交并且您不想添加记录,除非名称字段存在。

要给名称字段一个 "required" 特征,它应该在模型本身中声明,community.rb,例如:

  validates :name,  presence: true, length: { maximum: 30 }

在你的控制器中,我建议如下:

def community_params
      params.require(:community).permit(:name)
end

祝你好运!