我正在尝试在FormHelper中使用Hash对象,如ActiveRecord模型:
<% hash = { :some_key => 'some_value' } %>
<% fields_for "hash", hash do |f| %>
<%= f.text_field :some_key %>
<% end %>
据我所知,它试图调用:hash_对象的some_key方法。我试图覆盖Hash类的'send'方法,但没有运气:
def send( symbol, args = [] )
if self.has_key?( symbol )
self[ symbol ]
elsif self.has_key?( symbol.to_s )
self[ symbol.to_s ]
else
super
end
end
你有什么想法我怎么能玩这个?
感谢您的帮助。
答案 0 :(得分:2)
非常感谢KL-7提出的OpenStruct。所以,如果有人需要这个,我在这里添加完整的工作示例。
class Model < ActiveRecord::Base
HASH_ATTRIBUTE_DEFAULT = {
:value => '',
:selected => 0
}
serialize :hash_attribute, Hash
def hash_attribute
read_attribute( :hash_attribute ) || HASH_ATTRIBUTE_DEFAULT
end
def hash_attribute=( hash )
write_attribute( :hash_attribute, hash ) unless hash.nil?
end
end
现在是OpenStruct的时候了:
<% fields_for "model[hash_attribute]", OpenStruct.new( @model.hash_attribute ) do |f| %>
<%= f.text_field :value %>
<%= f.check_box :selected %>
<% end %>