需要嵌套参数

时间:2015-03-04 16:16:13

标签: ruby-on-rails nested-attributes

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

要创建社区,请按以下方式发布JSON:

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

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

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

...且名称缺失,我可以创建一个没有名字的社区。

我想强制出现“名字”。我试过了

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

但我得到

  

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

     

请求

     

参数:

     

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

如何强制存在非空的名称值?

非常感谢

2 个答案:

答案 0 :(得分:2)

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

validates_presence_of :name

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

答案 1 :(得分:2)

我会在这里走出困境并假设您正在使用表单提交,除非名称字段存在,否则您不想添加记录。

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

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

在你的控制器中我建议像:

def community_params
      params.require(:community).permit(:name)
end
祝你好运!