0

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>

したがって、インデックス ページ内にパーシャルを配置しようとしている場合にのみ、機能しません。私は何を間違っていますか?

4

1 に答える 1