背景を追加するすべての属性を上書き...instance_variable_set(:@attributes、{:brand.to_s =>「アップル」})が代わりに
私は、文字列を見て、何を決定しようとパーサを書いています製品に含まれる可能性があります。私は自分の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
で上書きされます。何か不足していますか?これを行うより良い方法はありますか?
は、我々はあなたの 'Product'モデルを見ることができますか? –
'instance_variable_set'を使う特別な理由はありますか、' token.values'が返す 'Hash'の' key'で表される属性を更新したいだけですか? – Swanand