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                           
4

2 回答 2

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.
于 2012-09-10T13:32:24.033 回答
0

您可以使用eval.

10.times do
  eval("self.book#{count} = count}")
end
于 2012-09-10T13:32:26.987 回答