2012-09-10 48 views
0

我想作一个字符串成为一个属性:如何将字符串更改为方法或字段?

Model: 
    Author 
    attr_accessible :book1, book2, book3 etc... 

我想在一个较小的命令来检索20本书

def do_something 
    self.book1  
    self.book2  
    self.book3  
    ....   
end    

这是我想到了,但如何才能解决我让字符串成为一个属性,所以我可以检索数据。

def do_something    
    count = 0     
    10.times do     
    self."book#{count += 1}" 
    end       
end       

回答

1

这将工作:

def do_something    
    count = 0     
    10.times do     
    self.send("book#{count += 1}") 
    end       
end  

也可以尝试这个,它更简单,它应该工作以及:self[:book1]self['book1']

顺便说一句,这是奇怪的设计。考虑使用一系列书籍:

attr_accessible :books 

... 

self.books.each { |book| puts book } 

self.books[0] # etc. 
+0

我可能会使用自[:BOOK1]感谢您的信息我会做: 计数= 0 10.times做 自[ “书#{数+ = 1}” to_sym。 ] 结束 – fujisan

0

您可以使用eval

10.times do 
    eval("self.book#{count} = count}") 
end 
+0

在这种情况下,self.send似乎明显优于我评估... –

+0

eval如何工作? @LukasStejskal这是如何工作的? – fujisan

+0

'eval'只是将任何字符串评估为ruby表达式。 http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-eval – MurifoX

相关问题