我有这个:
<%= 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 } %>
不知何故部分渲染了这个对象!我想这是因为名字污染。现在如何克服这个问题呢?
答案 0 :(得分:0)
<%= render :partial => 'rewards', :object => @rewards, :as => :reward %>
您应该能够以reward
的身份访问它以进行测试尝试:
<%= reward.inspect %>
哦,原因如果它应该重复,你应该以{{1}}代替:collection
来传递它,就像我的例子中那样
答案 1 :(得分:0)
我建议您查看已填充@rewards的查询。看起来@reward集合中有两个对象,一个Reward对象和一个nil对象。
您可以使用集合的紧凑方法来删除nil对象。