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 に答える