Rails 3.1、Ruby 1.9.2
Railscastsエピソード345(HSTORE)を構築中のアプリケーションに適合させようとしています-この問題はHSTORE中心ではありません...プロパティハッシュをシリアル化した場合にも発生するためです。
これが私が質問しているコードです:
Class Product < ActiveRecord::Base
has_many :properties
%w[author rating runtime].each do |key| # *****--> PLEASE SEE BELOW!
attr_accessible key
scope "has_#{key}", lambda { |value| where("properties @> (? => ?)", key, value) }
define_method(key) do
properties && properties[key]
end
define_method("#{key}=") do |value|
self.properties = (properties || {}).merge(key => value)
end
end
*さて、これがひねりです。製品クラスには、作成時に管理者によって割り当てられる多くのプロパティがあります。これは、プロパティと呼ばれる結合モデルで行われます。
したがって、プロパティの配列の代わりに、Propertyという名前の結合されたhas_manyモデルを検索し、配列にプロパティIDのコレクションを入力させたいと思います。
%w[作成者評価ランタイム]の宣言された配列を次のように置き換えてみました
self.properties.collect{ |property| "property_#{property.id}" }.each do |key|
しかし、それは機能しません!! プロパティの関係で未定義のメソッドエラーが発生します(モデルがまだインスタンス化されていないためだと思いますか?)私はプログラミングにかなり慣れておらず、メタプログラミングについて何も知りません。
編集-私はこれをすべてafter_findフックに移動しようとしましたが、これも機能しません(他の何十もの失敗した試みと一緒に)。
どんな助けでも大歓迎です!