首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ohm / Redis中设置动态字段

在Ohm / Redis中设置动态字段
EN

Stack Overflow用户
提问于 2011-07-10 08:20:23
回答 2查看 519关注 0票数 2

如何为Ohm对象动态设置字段?

代码语言:javascript
复制
class OhmObj < Ohm::Model
  attribute :foo
  attribute :bar
  attribute :baz

  def add att, val
    self[att] = val
  end
end

class OtherObj

  def initialize
    @ohm_obj = OhmObj.create
  end

  def set att, val
    @ohm_obj[att] = val #doesn't work
    @ohm_obj.add(att, val) #doesn't work
  end 
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-10 09:23:23

attribute class method from Ohm::Model为命名属性定义了访问器和赋值器方法:

代码语言:javascript
复制
def self.attribute(name)
  define_method(name) do
    read_local(name)
  end

  define_method(:"#{name}=") do |value|
    write_local(name, value)
  end

  attributes << name unless attributes.include?(name)
end

因此,当您说attribute :foo时,您可以免费获得这些方法:

代码语言:javascript
复制
def foo         # Returns the value of foo.
def foo=(value) # Assigns a value to foo.

您可以使用send调用赋值方法,如下所示:

代码语言:javascript
复制
@ohm_obj.send((att + '=').to_sym, val)

如果你真的想说@ohm_obj[att] = val,那么你可以在你的OhmObj类中添加如下内容:

代码语言:javascript
复制
def []=(att, value)
    send((att + '=').to_sym, val)
end

您可能也希望访问器版本保持对称性:

代码语言:javascript
复制
def [](att)
    send(att.to_sym)
end
票数 3
EN

Stack Overflow用户

发布于 2011-09-11 19:45:37

默认情况下,[][]=作为动态属性访问器和赋值器在OHM0.2的Ohm::Model中定义。

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

https://stackoverflow.com/questions/6638375

复制
相关文章

相似问题

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