我似乎无法弄清楚如何在create
方法上完成我想要做的事情。
如果没有值,我现在可以使用,该项目将被删除。但是,如果存在1个或多个参数值,则传递并保存。不是我需要的。我需要一个全有或全无的场景。我只想在所有允许的键都有值的情况下保存。 params.permit(:name, :description, :copyright)
在使用organizations.save!
保存条目之前,我需要确保所允许的所有参数都不是空的。
我全身心地搜索,似乎无法缩小对我的确切问题的答案。
这是我的代码:
class OrganizationsController < ApplicationController
def index
query_params = params.permit(:id, :name,)
if query_params.blank?
organizations = Organization.all
else
organizations = Organization.where(query_params)
end
render json: organizations, root: "organizations"
end
def create
organizations = Organization.new(organization_params)
if organization_params.present?
organizations.delete
else
organizations.save!
render json: organizations
end
end
private
def organization_params
params.permit(:name, :description, :copyright)
end
end
答案 0 :(得分:1)
您应该为模型添加验证。 从你的问题我明白你只想在所有领域获得价值时保存细节,如果不是你不想保存,对吧?如果是,那么在模型中添加验证将为您提供所需的信息。
将以下内容添加到您的组织模型
validates_presence_of :name
validates_presence_of :description
validates_presence_of :copyright
通过这样做,将不允许用户保存详细信息,除非并且直到所有三个字段都有一些值。
无需使用删除,因为不会保存不完整的信息。
了解更多高级信息click here
答案 1 :(得分:0)
要检查organization_params
哈希的值是empty
,您可以执行以下操作:
organization_params.values.all? { |x| !x.empty? }
或者,这个:
organization_params.all? { |k,v| !v.empty? }
您还可以检查任何参数值是否为空:
organization_params.any? { |k,v| v.empty? }
因此,您的create
方法可以重写为:
def create
organizations = Organization.new(organization_params)
if organization_params.any? { |k,v| v.empty? }
# at least one param is empty, so delete the record
organizations.delete
else
# all the params values are present, so save the record
organizations.save!
render json: organizations
end
end