我想在ruby中写一个条件,如果没有用户图像,则显示默认图像,如果存在则显示当前图像。
这是我的index.html.slim页面:
@product.reviews.each do |r|
a href="#"
= image_tag r.user.image_url :thumbnail`
答案 0 :(得分:2)
我建议你在帮助器或模型中添加代码,以保持代码清洁。
辅助方法:
def user_avatar user
if user.image.present?
image_tag user.image_url :thumbnail
else
# Assuming you have a default.jpg in your assets folder
image_tag 'default.jpg'
end
end
查看页面:
@product.reviews.each do |r|
a href="#"
= user_avatar r.user
另外,从代码中我觉得你使用的是像paperclip或carrierwave这样的库。
如果在回形针中,您可以通过将此代码放入模型中来设置默认图像。
:default_url => "/assets/:style/missing_avatar.jpg"
如果您使用的是载波,请将此方法放在上传器文件中。
def default_url
"/images/fallback/default.png"
end
答案 1 :(得分:1)
假设您使用回形针或其他东西将图像保存到数据库,您可以通过
检查图像是否存在08-14 00:19:47.866 31836-31836/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.easypass.app.cliente, PID: 31836
java.lang.RuntimeException: Unable to create application com.easypass.app.cliente.Application: java.lang.NullPointerException: storage == null
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4463)
at android.app.ActivityThread.access$1500(ActivityThread.java:146)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1274)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5280)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException: storage == null
at java.util.Arrays$ArrayList.<init>(Arrays.java:38)
at java.util.Arrays.asList(Arrays.java:155)
at com.parse.ManifestInfo.hasRequestedPermissions(ManifestInfo.java:392)
at com.parse.ManifestInfo.hasAnyGcmSpecificDeclaration(ManifestInfo.java:454)
at com.parse.ManifestInfo.getPushType(ManifestInfo.java:201)
at com.parse.GcmRegistrar.registerAsync(GcmRegistrar.java:86)
at com.parse.Parse.initialize(Parse.java:230)
at com.easypass.app.cliente.Application.onCreate(Application.java:19)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1014)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4460)
你应该查看你的图片宝石,看看这是否有效,因为我不知道你有什么样的设置。
答案 2 :(得分:0)
我设法通过在用于显示用户的视图内部使用erb来解决此问题。
此方法的优点是您无需为多个用户多次保存默认照片。您可以将其中一个保存在资产/图像中,并仅依靠它。
我使用Active Storage和以下宝石来处理照片的上载和调整大小:
gem 'image_processing', '1.9.3'
gem 'mini_magick', '4.9.5'
gem 'active_storage_validations', '0.8.9'
并在必要的视图内编写了以下代码:
<% if user.image.attached? %>
<%= image_tag user.image.variant(resize_to_limit: [200, 200]) %>
<% else %>
<%= image_tag("default.jpg", alt: "A stern frog", width: "200") %>
<% end %>
只需确保在资产/图片中有一张名为default.jpg的照片