Фоновая ...
Я пишу парсер, который просматривает строки и пытается определить, какие продукты они могут содержать. Я создал свой собственный класс Token
, чтобы помочь.
class Token < ActiveRecord::BaseWithoutTable
attr_accessor :regex
attr_accessor :values
end
Пример токена:
Token.new(:regex => /apple iphone 4/, :values => { :brand => "Apple", :product => "iPhone", :version => 4})
(где все хеш-ключи соответствуют столбцам базы данных в таблице продуктов.)
Вот проблема: в моем Parser
, когда обнаружен Token
, я пытаюсь добавить связанные значения в экземпляр Product
, например, так:
token.values.each do |v|
attrib, value = v[0], v[1]
my_product.instance_variable_set(:@attributes, { attrib.to_s => value })
end
Это работает, за исключением того, что мне кажется, что я должен установить все свои атрибуты одновременно. Если я делаю это поэтапно (то есть, когда я обнаруживаю новые токены), он перезаписывает любые неуказанные атрибуты nil
. Я что-то пропустил? Есть ли лучший способ сделать это?