我正在迭代一个数组列表,引用连接记录中的数据(学生):
index.html.erb
<% @activities.compact.each do |activity| %>
<div class="img" style="background-image: url(<%= activity.student.image.url(:thumb) %>)">
<% end %>
如果由于某种原因用户删除了已连接的记录(学生),Rails会抛出此错误:
NoMethodError in Activities#index
undefined method `image' for nil:NilClass
有没有办法告诉Rails仍然呈现页面,但是如果不存在那么将sub作为该记录的默认值?
答案 0 :(得分:3)
当然!例如,
activity.student.try{|s| s.image.url(:thumb)} || image_path("default.png")
你可能想把它放到帮助器中,因为它似乎开始变得复杂。
此外,如果用户控制附件URL的任何部分(例如,如果您使用其上传文件的文件名),我会对此处的XSS问题保持警惕。我不确定erb在输出属性时是否做对了。也许它确实 - 我只是不确定。
答案 1 :(得分:0)
如果您使用carrierwave gem进行上传,则可以使用内置的默认图片解决方案https://github.com/carrierwaveuploader/carrierwave#providing-a-default-url
答案 2 :(得分:0)
尝试
<% @activities.compact.each do |activity| %>
<% if activity.student.present? %>
<div class="img" style="background-image: url(<%= activity.student.image.url(:thumb) %>)">
<% end %>
<% end %>