FormHelper和Hash作为模型

时间:2012-02-20 16:43:32

标签: ruby-on-rails ruby

我正在尝试在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

你有什么想法我怎么能玩这个?

感谢您的帮助。

1 个答案:

答案 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 %>