0

と の 2 つのモデルがPlaceありAddressます。モデルの関係は、

Placeで、has_one :address , :dependent => :destroyAddressbelongs_to :place

新しいフォームでは、フォームを使用して問題なくPlaces Controllerフィールドを追加できます。Addressfields_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

@ヴァレリーは正しいです。すべての場所に住所オブジェクトがあるとは限りません。

これを試して:

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