我需要一些关于这个问题的建议。在我的视图中,我正在调用一个这样的方法:
<%= image_tag image_path(@photo) %>
路线:
match "/image", to: 'images#image', via: 'get'
在我的控制器中,我有以下方法:
def image
@image = Image.where("id = ?", params[:id]).first
send_file @image.image.url.to_s, :disposition => 'inline', :type => 'image/jpeg', :x_sendfile => true
end
问题是当触发方法image
时,图像未显示且我在控制台中收到以下错误:
NoMethodError (undefined method `image' for nil:NilClass)
您认为有什么问题?谢谢!
答案 0 :(得分:1)
您的路线设置不正确。它没有将id参数传递给图像动作,因此你的“params [:id]”返回nil,因此你的@image变量最终为零。
在路线文件中尝试此操作:
match "image/:id", to: 'images#image', via: 'get'
当你在它的时候,你也可以使用较短的版本,因为你使用Rails 4(根据你的标签,无论如何):
get "image/:id", to: 'images#image'
答案 1 :(得分:1)
错误的含义: 图像属于@ image的类。你的@image是零,所以没有所谓的nil.image。
<强>溶液强> 将行动路线改为“匹配”/ image /:id“,改为:'images#image',来自:'get'” 所以链接将是[http:// sitename / images / image / 9],9是params [:id]。
在控制器中,你应该将9替换为你的变量(比如“#{object.id}”)。希望得到帮助,抱歉我的英语不好。
答案 2 :(得分:0)
检查您的@image
值,似乎Photo没有给定ID的记录。