2010-10-15 22 views
0

我正在創建一個應用程序,該應用程序將根據單詞中定義的字母顯示隨機圖片。將參數傳遞迴模型以優化隨機動作

使用Paperclip將圖像附加到Pictures模型(包含另一個「字母」字段),並將在每個塊中迭代。

我該如何去將每個區塊的信回傳給模型進行隨機選擇。

這是我到目前爲止,但它拋出以下錯誤。

undefined method `%' for {:letter=>"e"}:Hash 

型號:

def self.random(letter) 
    if (c = count) != 0 
    find(:first, :conditions => [:letter => letter], :offset =>rand(c)) 
    end 
end 

查看:

<% @letters.each do |a| %> 
    <%= Picture.random(a).image(:thumb) %> 
<% end %> 

感謝

回答

1

的一個問題是你的條件有語法錯誤。哈希符號是錯誤的:

:conditions => [:letter => letter] 

應該

:conditions => {:letter => letter} 

而且,在我看來,你的隨機範圍將始終排除第一張圖片,如果你不允許0除了偏移那麼,如果隨機數是0,你真的想返回零嗎? (a).image(:thumb)會在每次c == 0時爲「nil:NilClass」異常拋出「未定義方法」圖像。大概可以使用:

def self.random(letter) 
    find(:first, :conditions => {:letter => letter}, :offset =>rand(count)) 
end 

編輯︰你要麼或者需要保證你的數據庫有所有字母的圖像,或告訴用戶沒有圖像存在給定的字母。

<% @letters.each do |a| %> 
    <% if pic = Picture.random(a).image(:thumb) %> 
    <%= pic.image(:thumb) %> 
    <% else %> 
    No image available for <%= a %> 
    <% end %> 
<% end %> 

或類似...

編輯:其實我不認爲你的偏移策略會奏效。另一種方法是從該集合返回可用圖像集爲給定的字母和隨機選擇,是這樣的:

def self.random(letter) 
    pics = find(:all, :conditions => {:letter => letter}) 
    pics[rand(pics.size)] if !pics.blank? 
end 
+0

嗯,是的它拋出了一項「零未定義的方法‘形象’:NilClass」 ,當刪除引用不爲0時,它也會執行此操作。 – wastedhours 2010-10-15 14:40:42

+0

確保您的數據庫播種了可能遇到的字母的圖像。如果'letter'的圖像不在數據庫中,您將得到nil錯誤。或者你需要優雅地爲用戶失敗(見編輯)。 – 2010-10-15 14:54:29

+0

謝謝!儘管如此,它仍然會失敗。 – wastedhours 2010-10-15 15:08:35

相關問題