部分显示操作不会显示在索引视图中 - rails

时间:2013-05-07 18:02:29

标签: ruby-on-rails-3 jquery

我在部分名为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>

所以只有当我试图将部分放在我的索引页面中时才会起作用。我做错了什么?

1 个答案:

答案 0 :(得分:0)

这是我第一次尝试使用Ajax,因此在用户点击链接以显示show动作之前,我错误地将索引操作中的show动作部分包含在内。所以我用index div替换了index操作中的partial,只有当用户点击属性链接通过show动作查看属性时,我才用部分通过ajax替换空div。