我的主要模型Activity有适当的数据。
>> @activity
=> #<Activity id: 4, name: "Take a nap", description: "Let your kids sleep when they're tired", location: "home", duration_minutes: 60, created_at: "2014-01-01 20:32:56", updated_at: "2014-01-01 20:32:56">
关联的模型,Review,返回一个基本为零的CollectionProxy。因此,当我尝试迭代@activity.reviews.each
时,会导致我出现问题,因为它总是有一个将迭代的零CollectionProxy。
>> @activity.reviews
=> #<ActiveRecord::Associations::CollectionProxy [#<Review id: nil, rating: nil, reviewer_name: nil, activity_id: 4, description: nil, created_at: nil, updated_at: nil>]>
>> @activity.reviews.any?
=> true
>> @activity.reviews.count
=> 0
如果我在那里放了一些数据,我会得到我添加的真实数据,但我仍然会得到这个nil集合代理小丑。
>> @reviews
=> #<ActiveRecord::Associations::CollectionProxy [#<Review id: 5, rating: 5, reviewer_name: "Peter", activity_id: 4, description: "I can be productive when the kids are sleeping.", created_at: "2014-01-05 03:53:08", updated_at: "2014-01-05 03:53:08">, #<Review id: nil, rating: nil, reviewer_name: nil, activity_id: 4, description: nil, created_at: nil, updated_at: nil>]>
>> @reviews.any?
=> true
>> @reviews.count
=> 1
所以,我的问题是,我的关联有什么问题,我不断收到这个无用的nil CollectionProxy条目?
另外,我刚刚查看了postgres控制台,没有损坏的记录,关联(activity_id = 4)但没有数据。
在幕后:
/models/activity.rb
class Activity < ActiveRecord::Base
has_many :reviews
end
/models/review.rb
class Review < ActiveRecord::Base
belongs_to :activity
end
答案 0 :(得分:1)
CollectionProxy
对象不是 nil
,正如您所说。 @activity
实际上有一个 Review
- 问题是Review
的{{1}} id
。不确定这是怎么发生的,但你可以从Rails控制台纠正这个问题:
nil
答案 1 :(得分:0)
执行@ activity.reviews的时间点是在form_for之后的显示页面上。看起来form_for创建了一个新的activity.review。它当时并没有得到保存/创建。所以,它只是创建了垃圾,它给了我基本上为零的CollectionProxy,但是它具有当前活动的activity_id。
<h2>Add a review</h2>
<%= form_for([@activity, @activity.reviews.build]) do |f| %>
<div class="field">
<%= f.label :rating %><br>
<%= f.number_field :rating %>
</div>
<div class="field">
<%= f.label :reviewer_name %><br>
<%= f.text_field :reviewer_name %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_area :description %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<h2>Reviews</h2>
<% @reviews.each do |review| %>
<p><%= "#{review.reviewer_name} - #{review.rating} - #{review.description}"%></p>
<% end %>
为zeantsoi和BroiSatse干杯,帮助我走上正确的道路来解决这个问题。
我的选择是在Add-A-Review之前移动评论,或者添加一些进一步的nil-checking。