Gallery has_many照片。 照片belongs_to gallery
在我的照片'show'视图中,我得到nil的错误'undefined method`name':行的NilClass'
<%= @photo.gallery.name %>
错误仅出现在不属于图库的照片上(没有分配图库名称的图片),这些图片会按照预期显示,即图库名称显示为它所属。 api说“如果你在一个没有响应它的对象上调用一个方法,Ruby就会引发NoMethodError”但是,即使它是空的,照片对象也不应该响应gallery.name吗?因为模型正确关联......
答案 0 :(得分:4)
你可能没有意识到,但你正在进行方法链接。
@photo.gallery
返回与Photo关联的Gallery对象。 @photo.gallery.name
返回与Photo相关联的Gallery对象的名称。
可能更容易将其视为(@photo.gallery).name
以下内容相当于您的代码:
<% @gallery = @photo.gallery %>
<%= @gallery.name %>
在您的情况下,当照片没有图库时,@ photo.gallery会返回nil。你只需要检查一下:
<%= @photo.gallery.name unless @photo.gallery.nil? %>
或者有一个替代案例,当它不存在时,无论你想要什么。
答案 1 :(得分:0)
最好在照片模型中定义画廊是照片必须的。
validate_presence_of :gallery_id
然后就不会发生这个问题了。