index アクションのビュー内で ajax を使用して表示しようとしている、properties/_property_details.html.erb というパーシャル内に show アクションがあります。
プロパティ/index.html.erb:
<div id="showdiv">
<%= render :partial => 'property_details' %>
</div>
プロパティ/_property_details.html.erb:
<div id="response">
<h3>
<%= [@property.Address,@property.City,"FL"].join(", ") %> <%= @property.Zip %></h3>
etc etc </div>
ただし、インデックス ページを読み込もうとすると、show アクションの @property 変数が nil になるため、
undefined method `Address' for nil:NilClass
おそらく、properties_controller で必要な show アクションの (params[:id]) がないためです。
def show
@property = Property.find(params[:id])
respond_to do |format|
format.js {render :partial => 'property_details' ,:layout => false}
format.html
end
end
しかし、その場合は、これをテストするためだけに show アクションで @property の値をハードコーディングできるはずですが、次のコードでは、部分的なものを含むインデックス ページを読み込もうとすると、nilclass エラーに対して同じ未定義のメソッドが返されます。 :
def show
@property = Property.find(1)
respond_to do |format|
format.js {render :partial => 'property_details' ,:layout => false}
format.html
end
end
@property が nil に戻ってくるのはなぜですか? Rails コンソールを開いて p = Property.find(1) を実行し、返されたプロパティを取得したため、なんらかの理由でパーシャルがインデックス ページ内にあるときにコントローラーの show アクションをリッスンしていません。
パーシャルは、次のように properties/show.html.erb 内にある場合に正常に機能します。
<div class="twothirds">
<%= render :partial => 'property_details' %>
</div>
<div class="onethird">
<%= render :partial => 'property' %>
</div>
したがって、インデックス ページ内にパーシャルを配置しようとしている場合にのみ、機能しません。私は何を間違っていますか?