2016-12-28 21 views
0

我目前正在通過陣列的列表迭代,參考從加入記錄數據(學生):軌道的每一個跳躍,如果零值

index.html.erb

<% @activities.compact.each do |activity| %> 
    <div class="img" style="background-image: url(<%= activity.student.image.url(:thumb) %>)"> 
<% end %> 

如果由於某種原因,用戶刪除記錄加入(學生),導軌引發此錯誤:

NoMethodError in Activities#index 
undefined method `image' for nil:NilClass 

有沒有辦法告訴Rails仍然呈現頁面,但在分如果不存在該記錄的默認值?

回答

3

當然!例如,

activity.student.try{|s| s.image.url(:thumb)} || image_path("default.png") 

雖然您可能想將它放入幫助程序,因爲它似乎開始變得複雜。

此外,如果用戶控制附件URL的任何部分(例如,如果您正在使用其上傳文件的文件名),我會在這裏警惕XSS問題。我不確定erb在輸出屬性時是否正確。也許它確實---我只是不確定。

+0

只需跟進,我做了一些測試,它看起來像ERB不畢竟是正確的事情,所以我的XSS擔心是不必要的。 –

+0

例如'<% ['"> woops

"><%= x %>
<% end %> '是好的。 –

0

嘗試

<% @activities.compact.each do |activity| %> 
    <% if activity.student.present? %> 
    <div class="img" style="background-image: url(<%= activity.student.image.url(:thumb) %>)"> 
    <% end %> 
<% end %>