2011-11-07 66 views
0

我有一个ActiveRecord类 - 让我们调用它的评论 - 它有一个作者属性。有没有办法使用符号访问Active Record属性?

在我的代码中,我已经将注释和符号的实例传递给了辅助方法。我现在发现自己想要访问作者的属性,并想知道是否有一种方法来处理我的问题。

我可以使用comment.read_attribute :author但我不能使用comment.write_attribute:author,因为它是一个私有方法。

我怀疑我错过了一些很明显的东西。有任何想法吗?

+0

我觉得我不太明白你的问题。 'comment.author'会帮助你吗? – netmute

+0

它会,但我希望能够通过任何符号,例如:date,:text到助手方法,并访问该属性。我想我可以使用eval(“评论”+ attr.to_s),但似乎很弱。 – brad

回答

1

您可以使用instance_eval

irb(main):006:0> class MyClass 
irb(main):007:1> attr_accesor :length 
irb(main):008:1> end 
irb(main):012:0> c = MyClass.new 
=> #<MyClass:0x27d6458> 
irb(main):016:0> b = 11 
=> 11 
irb(main):019:0> c.instance_eval("self.length = #{b}") 
=> 11 
irb(main):020:0> c.length 
=> 11 
irb(main):019:0> c.instance_eval("self.length") 
=> 11 

irb(main):021:0> c.send :length 
=> 11 
+0

'send'不在乎方法是公开的还是私人的,所以仔细使用它 – Bohdan

+0

是的,效果很好。比eval更优雅。谢谢。 – brad

相关问题