调用控制器方法时nil的未定义方法:NilClass

时间:2014-02-27 05:20:36

标签: ruby-on-rails ruby-on-rails-4

我需要一些关于这个问题的建议。在我的视图中,我正在调用一个这样的方法:

<%= 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)

您认为有什么问题?谢谢!

3 个答案:

答案 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的记录。