在我的项目中使用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)
如果我的任何属性哈希是nil
(user_identifier_attributes
如上),那么我得到:
NoMethodError: undefined method `with_indifferent_access' for nil:NilClass
但是,如果我在我的方法中将nil
属性设置为新的,那么实体就会用值创建。HashWithIndifferentAccess
initialize
NULL
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>