2014-11-04 53 views
0

我有一個帖子和評論模型(後的has_many評論,belongs_to的崗位評論)軌,紅寶石,回形針檢查文件是否存在條件

我想顯示一個隨機評論,但只有當畫面與存在評論(使用回形針)。這裏是我的代碼:

<% count = 0 %> 
<% @shuffle_posts = @posts.shuffle %> 
<% @shuffle_posts.each do |post| %> 
    <% if post.comments.sample.picture.file? %> 
     <%= link_to image_tag(post.comments.sample.picture.url(:thumb)),post_path(post) %> 
     <% count += 1 %> 
    <% else %> 
     <% @shuffle_posts = @posts.shuffle %> 
    <% end %> 
    <% break if count ==1 %> 
<% end %>   

此代碼運行,但是當我刷新了幾次,我將獲得評論沒有圖片!我認爲這與我的「.file?」有關條件,但不知道是什麼導致它顯示,因爲我認爲我的代碼應該捕捉沒有圖片的評論。

如果有人看到不同的東西或可能提供另一種解決方案,那將是超級有用!

回答

1

視圖不應該獲取所有業務邏輯。

對我來說,在集合上調用shuffle是沒有意義的,然後循環直到找到與條件匹配的帖子。你寫的代碼是不必要的複雜的。

我的建議是在查詢級別過濾記錄集。只提取圖像字段不爲空的記錄,然後從該集合中獲取隨機記錄。

假設圖像字段被稱爲picture_path。在控制器

@random_comment = Comment.where("picture_path IS NOT NULL").shuffle 

和視圖將只是

<%= link_to image_tag(@random_comment.picture.url(:thumb)), post_path(@random_comment.post) %> 

注:這不是從你的問題清楚,如果你想顯示一個隨機評論或信息。你說了評論,但代碼獲取了一個隨機的帖子。

注2:請注意我的視圖和您的視圖之間的差異。我的觀點是一條線,沒有業務邏輯,只有表示邏輯。這就是它應該的。沒有可變分配或業務邏輯。

+0

謝謝,西蒙娜!同意在所有方面biz邏輯需要在控制器中。我正走在一條糟糕的道路上。我似乎無法讓您的.where條件起作用。 .where(「picture IS NOT NULL」)會拋出一個錯誤:undefined column。圖片的列名稱(使用回形針)是'圖片'。你能建議嗎? – gitastic 2014-11-04 21:58:25

+0

這可能是該字段不是「圖片」。檢查文件'schema.rb'以獲取正確的屬性名稱。 – 2014-11-05 10:24:40