我有两个模型,Place
和Address
。模型关系是,
在Place
,has_one :address , :dependent => :destroy
在Address
,belongs_to :place
。
在Places Controller
的新表单中,我可以使用表单中的Address
将字段添加到fields_for :address
,而不会出现任何问题。
但是在显示Place
个详细信息时,我无法获得该地点的Address
详细信息。我不知道我在哪里犯了错误。
在show.html.erb
的{{1}}中,我有,
Places Controller
所以,在<% @places.each do |place| %>
<p>
<b>Max people:</b>
<%=h place.max_people %>
</p>
<p>
<b>Street:</b>
<%=h place.address.street %>
</p>
<p> City: </b>
<%=h place.address.city %>
</p>
<p> Pincode: </b>
<%=h place.pincode %>
</p>
<% end %>
,
PlacesController
正确显示所有def show
@userid=session[:userid]
@places = Place.find(:all , :conditions => ["user_id = ?", @userid])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @place }
end
end
详细信息,但不显示Place
详细信息。我搜索过SO以找到我的错误,但我发现的只是形式问题。在我的情况下,新表格正常工作,但没有显示。
错误是,
Address
在控制台中,
NoMethodError in Places#show
Showing app/views/places/show.html.erb where line #9 raised:
undefined method `street' for nil:NilClass
我错过了什么吗?感谢。
答案 0 :(得分:1)
确保所有places
都有一个地址对象。您可以使用.try()
<%=h place.address.try(:street) %>
<%=h place.address.try(:city) %>
因此,如果place.address
为零,则不会呈现任何内容。
答案 1 :(得分:0)
@Valery是对的。所有地方可能没有地址对象。
试试这个:
<% @places.each do |place| %>
<% next unless place.address.present? %>
<p>
<b>Street:</b>
<%= place.address.street %>
</p>
<% end %>