我有一個序列化數據的模型,我想使用best_in_place
寶石編輯這些數據。這在使用best_in_place gem時默認是不可能的。如何才能做到這一點?如何使用best_in_place gem更改序列化數據?
1
A
回答
4
可以通過擴展method_missing
和respond_to_missing?
來將請求轉發到序列化數據。可以說你有你的序列號Hash
在data
。在這是一個包含序列化的數據比如,你可以使用這個代碼的類:
def method_missing(method_name, *arguments, &block) # forewards the arguments to the correct methods
if method_name.to_s =~ /data_(.+)\=/
key = method_name.to_s.match(/data_(.+)=/)[1]
self.send('data_setter=', key, arguments.first)
elsif method_name.to_s =~ /data_(.+)/
key = method_name.to_s.match(/data_(.+)/)[1]
self.send('data_getter', column_number)
else
super
end
end
def respond_to_missing?(method_name, include_private = false) # prevents giving UndefinedMethod error
method_name.to_s.start_with?('data_') || super
end
def data_getter(key)
self.data[key.to_i] if self.data.kind_of?(Array)
self.data[key.to_sym] if self.data.kind_of?(Hash)
end
def data_setter(key, value)
self.data[key.to_i] = value if self.data.kind_of?(Array)
self.data[key.to_sym] = value if self.data.kind_of?(Hash)
value # the method returns value because best_in_place sets the returned value as text
end
現在,您可以訪問object.data:使用吸氣object.data_name和設定值使用的setter object.data_name [名] = 「測試」。但要使用best_in_place
來實現此功能,您需要將其動態添加到attr_accessible
列表中。要做到這一點,你需要改變mass_assignment_authorizer
的行爲,使對象響應accessable_methods
與應允許這樣被編輯方法名稱的數組:
def accessable_methods # returns a list of all the methods that are responded dynamicly
self.data.keys.map{|x| "data_#{x.to_s}".to_sym }
end
private
def mass_assignment_authorizer(user) # adds the list to the accessible list.
super + self.accessable_methods
end
所以在視圖中,您可以現在打電話
best_in_place @object, :data_name
要編輯的序列化的數據@ object.data [:名稱]
//也可以使用元素索引,而不是屬性名稱的數組做到這一點:
<% @object.data.count.times do |index| %>
<%= best_in_place @object, "data_#{index}".to_sym %>
<% end %>
您不需要更改其餘的代碼。
相關問題
- 1. 如何在使用JSON.NET進行序列化時更改數據?
- 2. Rails-best_In_place gem with date
- 3. 使用表格中的best_in_place gem
- 4. 如何將country_select gem與best_in_place編輯
- 5. Rails 3使用devise和best_in_place gem,不會更新訂戶模型
- 6. Ruby on Rails best_in_place gem throwing error
- 7. Rails best_in_place嵌套資源gem
- 8. 使用best_in_place寶石
- 9. 如何反序列化已更改類型的舊數據?
- 10. 如何更改Wcf以使用不同的序列化程序?
- 11. 如何使用rspec和capybara測試best_in_place
- 12. 使用boost序列化來序列化類而不更改類
- 13. 如何更改序列化對象?
- 14. PHP如何更改序列化數據的值並寫入數據庫
- 15. 停止活動模型序列化程序嵌套數據gem
- 16. 如何使用PHP更新MySQL數據庫中的序列化數據?
- 17. 如何更改Python多處理使用的序列化方法?
- 18. 如何使用XML序列化更改XML根名稱?
- 19. Json序列化更改DataTime
- 20. Java更新數據結構更改爲序列化文件
- 21. 序列化JENA OntModel更改
- 22. 更改序列化器類
- 23. 如何在使用Json.net序列化時根據類型更改屬性名稱?
- 24. 序列化時修改數據
- 25. 如何使用c#序列化和反序列化XML文件中的數據?
- 26. 是否可以使用Mysql2 gem更改選定的數據庫?
- 27. 如何使用一個序列化數據連接兩列?
- 28. 使用數據序列化函數
- 29. 就地編輯Rails,jQuery和best_in_place gem
- 30. Rails best_in_place gem input has nasty extra space
謝謝你。那麼非關聯的Array/Hash呢?沒有密鑰的數組有可能有類似的東西嗎?這是我的問題:http://stackoverflow.com/questions/28415176/how-to-edit-a-serialized-array-with-unknown-keys 謝謝! –
查看編輯添加了有關如何使用此數組的擴展 – davidb
我還編輯了另一個源來處理散列和數組.... – davidb