def initialize(user = nil,attributes = {}) @user = user (self.class.car_fields& attributes.keys.map {| i | i.to_sym})。每个都做| f | car [f] = attributes [f] if attributes.key?(f) …
因为在
attributes.keys.map{|i| i.to_sym }
您将每个键映射到符号,然后访问它们 attributes 作为符号,当它们是字符串键时。
attributes
所以你最终做了类似的事情:
{ "has_car" => "true", "has_truck" => "true", "has_boat" => "true", ... }[:has_car] # nil
一种可能的解决方案是创建一个新变量,调用 with_indifferent_access 上 attributes :
with_indifferent_access
indifferent_access_attributes = attributes.with_indifferent_access (self.class.car_fields & indifferent_access_attributes.keys.map(&:to_sym)).each do |field| seller[field] = indifferent_access_attributes[field] end
另一个是定义一种键的格式,并在整个过程中使用它。所以,不要映射到符号 attributes 键。