当数据属性为空时,ActiveRecord返回第一条记录

时间:2016-07-13 22:56:26

标签: ruby-on-rails activerecord active-model-serializers

我的控制器中有一个方法可以找到以json方式传入的模型的关系。当存在所有预期属性时,它工作正常。但如果我排除一个'project',我的项目方法会给我第一个记录而不是nil或Project.none。

所以当

ActiveModelSerializers :: Deserialization.jsonapi_parse(relationship_params ['project']计算结果为{}。调用项目返回相当于Project.first

项目方法

def project
  Project.find_by(ActiveModelSerializers::Deserialization.jsonapi_parse(relationship_params['project'], only: [:id]))
end

relationship param

def relationship_params
  return false unless params.dig(:data, :relationships)
      params.require(:data).require(:relationships).transform_keys(&:dasherize)
end

1 个答案:

答案 0 :(得分:2)

您可以验证您的params哈希值。但这是正常的,Model.find_by({})或Model.find_by(nil)返回第一个记录;

   def project
      find_params =ActiveModelSerializers::Deserialization.jsonapi_parse(relationship_params['project'], only: [:id])
      if find_params.present?
        Project.find_by(find_params)
      else
        nil
      end
    end