Rails显示两个表不起作用

时间:2013-01-16 08:08:24

标签: ruby-on-rails controller

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

Placehas_one :address , :dependent => :destroyAddressbelongs_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

我错过了什么吗?感谢。

2 个答案:

答案 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 %>