如何检查params.permit中是否存在值?

时间:2015-11-07 22:46:11

标签: ruby ruby-on-rails-4

我似乎无法弄清楚如何在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

2 个答案:

答案 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