【问题标题】:Require nested params需要嵌套参数
【发布时间】:2015-05-05 17:34:57
【问题描述】:

我有一个带有 RESTful API 的 Rails 服务器,允许使用“用户”创建“社区”。

为了创建一个社区,我像这样发布一个 JSON:

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

/api/v1/communities。问题是“名称”必须是强制性的,所以如果在 CommunitiesController 我这样做......

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

...名字不见了,我可以创建一个没有名字的社区。​​p>

我想强制出现“名称”。我已经尝试过

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

但我明白了

ActionController::ParameterMissing in Api::V1::CommunitiesController#create 参数丢失或值为 空:{:community=>[:name]}

请求

参数:

{“社区”=>{“名称”=>“社区名称”}}

如何强制存在 name 的非空值?

感谢您

【问题讨论】:

    标签: ruby-on-rails nested-attributes


    【解决方案1】:

    我将在这里冒昧地假设您正在处理表单提交并且您不想添加记录,除非存在名称字段。

    要为名称字段赋予“必需”特性,应在模型本身,community.rb 中声明它,例如:

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

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

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

    祝你好运!

    【讨论】:

    • 太好了!谢谢你告诉我。
    【解决方案2】:

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

    validates_presence_of :name
    

    强大的参数只是检查你的参数的层次结构并防止大规模分配。

    【讨论】:

    • 非常感谢,这就是我想要的:)
    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多