我的应用程序已使用当前代码工作了一年多,但在升级到Rails 4.1.8后,我收到以下错误:
这是一个音乐评论网站,用户有许多针脚,即评论,针脚属于用户。这些针脚有一年的'这是一个字符串。用户对他们评论的专辑进行排名,以便该网站创建他们当年的前十名。此页面显示发布前十名列表的所有用户。
页面控制器:
def tens2013
@users = User.includes(:pins).where('pins.year=?', '2013')
@pins = Pin.all
@pins_ten = Pin.where(:year => '2013', :rank => ['10', '9', '8', '7', '6', '5', '4', '3', '2', '1'], :rank => !nil)
end
观点:
<% @users.each do |user| %>
<ul class="ver2 well">
<li><div class="reviewer"><%= link_to (image_tag user.image(:small)), user %><h4><%= user.name %></h4></div></li>
<% user.pins.order('rank DESC').each do |pin| %>
<% if pin.year == '2013' && (pin.rank == 10 || pin.rank == 9 || pin.rank == 8 || pin.rank == 7 || pin.rank == 6 || pin.rank == 5 || pin.rank == 4 || pin.rank == 3 || pin.rank == 2 || pin.rank == 1 ) %>
<li><div class="span2"><%= link_to (image_tag pin.image(:medium)), pin %><br/> #<%= pin.rank %> <br/> <%= truncate(pin.album, length:15) %></div></li>
<% end %>
<% end %>
</ul>
<% end %>
我假设在rails中发生了一些变化,但是并没有使用.where方法。我一直在谷歌搜索它,但我似乎无法找到变化。
答案 0 :(得分:0)
我找到了答案,希望这将有助于升级Rails的其他人。这里有一篇很棒的博客文章:http://blog.arkency.com/2013/12/rails4-preloading/
在升级Rails的过程中,我需要将config.eager_load = false添加到我的development.rb文件中
您可以在该博客文章中阅读.includes vs .eager_load的精彩解释,但通过将.eager_load更改为false,activerecord查询无法加入这两个表。
我改变了
@users = User.includes(:pins).where('pins.year=?', '2013')
到
@users = User.eager_load(:pins).where('pins.year=?', '2013')
这一切都正常了。