的Rails 3.1 attr_accessible屬性的動態數組,紅寶石1.9.2Ruby on Rails的 - >元編程 - 創建基於的has_many關係
我試圖適應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的連接模型中完成的。
因此,我不想搜索一個名爲Property的has_many模型,而是使用屬性id的集合來填充數組。
我試圖與
self.properties.collect{ |property| "property_#{property.id}" }.each do |key|
,但不工作的更換的%聲明數組W [作者等級運行] !!我在屬性關係上得到了一個未定義的方法錯誤(我認爲這是因爲模型沒有實例化?)我對編程相當陌生,對元編程一無所知。
編輯 - 我一直在努力,所有這一切都移入after_find掛鉤,這不工作,要麼(與其他幾十個不成功的嘗試沿),所以輸了...
任何幫助是很大的不勝感激!
方法屬性僅適用於產品實例。 你想完全替代@ product.properties的語義嗎? (即消除has_many:屬性),還是你想保持正常的語義,並以某種方式補充它? – RadBrad
感謝您的答覆 - 我想保持正常的語義(因爲我想仍然能夠查詢@ product.properties),但添加到他們。例如,如果產品1只有屬性作者和評級分配,我想保留此實例的可訪問屬性列表中的運行時屬性。另一方面,如果產品具有通過連接分配的所有屬性,我希望所有屬性都可以訪問...... –