SQLite3 :: SQLException:没有这样的列:升级到Rails 4.1.8之后

时间:2014-11-27 15:20:30

标签: sqlite ruby-on-rails-4 activerecord

我的应用程序已使用当前代码工作了一年多,但在升级到Rails 4.1.8后,我收到以下错误: enter image description here

这是一个音乐评论网站,用户有许多针脚,即评论,针脚属于用户。这些针脚有一年的'这是一个字符串。用户对他们评论的专辑进行排名,以便该网站创建他们当年的前十名。此页面显示发布前十名列表的所有用户。

页面控制器:

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方法。我一直在谷歌搜索它,但我似乎无法找到变化。

1 个答案:

答案 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')

这一切都正常了。