我想上传文章的照片,所以我打开了动态存储,安装了三个mini_magick和image_processing gem。我还在文章模型中有两个方法负责调整照片大小,我还与照片有关系
def photo_as_thumbnail(photo)
photo.variant(resize_to_limit: [300, 300]).processed
end
def photo_as_icon(photo)
photo.variant(resize_to_limit: [50, 50]).processed
end
在控制器中,我添加了参数中的照片
private
def product_params
params.require(:article).permit(:name, :description, :price, photos: [])
end
要在视图中显示照片,我使用以下命令:
<% @product.photos.each do |photo| %>
<%= link_to image_tag(@product.photo_as_thumbnail(photo)), photo %>
<% end %>
列出并创建项目时,它会给出以下错误:
undefined method 'variant' for nil:NilClass
photo.variant(resize_to_limit: [50, 50]).processed
def photo_as_icon(photo)
photo.variant(resize_to_limit: [50, 50]).processed
end
但当编辑文章时,它不会给予任何错误,我可以上传和查看图像,以及保存我在不同领域所做的更改
启用活动存储并安装了两个gem mini_magick和image_processing并安装了imagemagick。在模型中添加了调整大小的方法,我希望用它来放一些更小的照片
1条答案
按热度按时间hm2xizp91#
好的,正如max在上面的注解中指出的,由于某种原因,
@product.photos
中有nils,然后将其传递到您的方法中。现在这是一个更大的问题,你可能应该深入研究为什么会发生这种情况。为此,你可能需要看看代码是一个产品的形式的一部分,或你是如何保存照片。
但在此期间,您可以通过nil检查来停止bug-可以通过以下两种方式之一来完成:
您可以检查在个别照片的方法为零,例如:
每次检查是否为nil --这将起作用,但感觉有点重复。另外,如果您将外部代码更改为以下内容:
意味着对于任何nils,你最终都会得到一堆空的div,比如:
因此,我的首选是不要在循环中输入nils,而是在传入之前尝试压缩数组:
这里
compact
会在传递给链接之前删除所有的nil,如果@product.photos
本身是nil,它可能仍然会博尔克,所以要和try一起使用,try只会在被调用的对象(也就是接收方)不是nil时才调用方法: