首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FormHelper和散列作为模型

FormHelper和散列作为模型
EN

Stack Overflow用户
提问于 2012-02-21 00:43:32
回答 1查看 472关注 0票数 1

我尝试在FormHelper中使用类似于ActiveRecord模型的散列对象:

代码语言:javascript
复制
<% hash = { :some_key => 'some_value' } %>

<% fields_for "hash", hash do |f| %>

  <%= f.text_field :some_key %>

<% end %>

据我所知,它试图为哈希对象调用:some_key方法。我试图重写Hash类的'send‘方法,但没有成功:

代码语言:javascript
复制
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

你知道我怎么玩这玩意儿吗?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-21 15:34:35

非常感谢KL-7提出的OpenStruct。所以,如果有人需要这个,我会在这里添加完整的工作示例。

代码语言:javascript
复制
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的时候了:

代码语言:javascript
复制
<% fields_for "model[hash_attribute]", OpenStruct.new( @model.hash_attribute ) do |f| %>

  <%= f.text_field :value %>
  <%= f.check_box :selected %>

<% end %>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9364846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档