我在部分名为properties / _property_details.html.erb中的我的show动作,我试图在索引动作的视图中使用ajax显示。
属性/ 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变量为零,所以我得到了
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会回来为零?我打开了rails控制台并执行了p = Property.find(1)并返回了一个属性,因此出于某种原因,当它在我的索引页面中时,partial不会在控制器中监听show动作。
如果属于/ show.html.erb,则部分工作正常:
<div class="twothirds">
<%= render :partial => 'property_details' %>
</div>
<div class="onethird">
<%= render :partial => 'property' %>
</div>
所以只有当我试图将部分放在我的索引页面中时才会起作用。我做错了什么?
答案 0 :(得分:0)
这是我第一次尝试使用Ajax,因此在用户点击链接以显示show动作之前,我错误地将索引操作中的show动作部分包含在内。所以我用index div替换了index操作中的partial,只有当用户点击属性链接通过show动作查看属性时,我才用部分通过ajax替换空div。