0

我有两个模型,PlaceAddress。模型关系是,

Placehas_one :address , :dependent => :destroyAddressbelongs_to :place

在新表单中,Places Controller我可以Address毫无问题地添加字段fields_for :address

但是当显示一个Place细节时,我无法得到Address那个地方的细节。我不知道我在哪里做错了。

show.html.erbPlaces 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详细信息,但不显示Address详细信息。我已经通过 SO 搜索以找到我的错误,但我发现的只是表格问题。就我而言,新表单正常工作,但不显示。

错误是,

  NoMethodError in Places#show

 Showing app/views/places/show.html.erb where line #9 raised:

 undefined method `street' for nil:NilClass

在控制台中,

  `Place.last.address.street` gives me correct data.

我错过了什么吗?谢谢。

4

2 回答 2

1

确保所有人places都有一个地址对象。你可以避免使用异常.try()

<%=h place.address.try(:street) %>

<%=h place.address.try(:city) %>

因此,如果place.address为 nil,则不会渲染任何内容。

于 2013-01-16T08:14:01.223 回答
0

@Valery 是对的。所有地方都可能没有地址对象。

试试这个:

<% @places.each do |place| %>
    <% next unless place.address.present? %>
    <p>
        <b>Street:</b>
        <%= place.address.street %>
    </p>
<% end %>
于 2013-01-16T09:44:41.503 回答