Rails渲染部分与集合两次?

时间:2011-10-24 15:36:08

标签: ruby-on-rails

我有这个:

<%= render :partial => "rewards", :collection => @rewards, :as => :reward %>

当我使用<%= @rewards.count %>计算集合中的项目时,它显示1,并且我检查数据库中只有一个奖励。但是,部分在我的主视图中呈现两次,第二个呈现为空(奖励== nil)。有什么线索吗?

更新: 找到原因,在此render语句之前,有一个user.rewards.build语句用于创建表单:

<%= render :partial => "form_reward", :locals => {:user => @user, :reward => @user.rewards.build } %>
<%= render :partial => "rewards", :collection => @rewards, :as => :reward, :locals => {:user => @user } %>

不知何故部分渲染了这个对象!我想这是因为名字污染。现在如何克服这个问题呢?

2 个答案:

答案 0 :(得分:0)

<%= render :partial => 'rewards', :object => @rewards, :as => :reward %>

您应该能够以reward的身份访问它以进行测试尝试:

<%= reward.inspect %>

哦,原因如果它应该重复,你应该以{{1​​}}代替:collection来传递它,就像我的例子中那样

答案 1 :(得分:0)

我建议您查看已填充@rewards的查询。看起来@reward集合中有两个对象,一个Reward对象和一个nil对象。

您可以使用集合的紧凑方法来删除nil对象。