0

在我的项目中使用accepts_nested_attributes_for时,如果我的任何嵌套属性的哈希值有一个nil值,那么我会收到一条错误消息,

NoMethodError: undefined method 'with_indifferent_access' for nil:NilClass`.

如果我将该 nil 值替换为空值,HashWithIndifferentAccess则嵌套实体将使用NULL值创建。

如果属性散列为零,是否有任何方法可以避免尝试创建实体,或者我应该从散列中删除该属性散列?


class User < ActiveRecord::Base
  has_one :user_info, autosave: true
  accepts_nested_attributes_for :user_info
end

class UserInfo < ActiveSupport::Base
  belongs_to :user
  has_one :user_identifier, autosave: true
  accepts_nested_attributes_for :user_identifier
end

class UserIdentifier < ActiveSupport::Base
  belongs_to :user_info
end

当我尝试创建一个新的User

hash = {follower_count: 10 , user_info_attributes: { user_identifier_attributes: nil } }

usr = User.new(hash)

如果我的任何属性哈希是niluser_identifier_attributes如上),那么我得到:

NoMethodError: undefined method `with_indifferent_access' for nil:NilClass

但是,如果我在我的方法中将nil属性设置为新的,那么实体就会用值创建。HashWithIndifferentAccessinitializeNULL

class UserIdentifier < ActiveSupport::Base
  belongs_to :user_info

  def initialize(attributes = nil)
        attributes[:user_identifier_attributes] = attributes.delete(:user_identifier) || HashWithIndifferentAccess.new
  end
end

hash = {follower_count: 10 , user_info_attributes: { user_identifier_attributes: nil } }
usr = User.new(hash)
usr.user_info.user_identifier # => #<UserIdentifier:0x0000559a30c32380 id: nil, user_info_id: nil, name: nil, value: nil>
4

0 回答 0