【问题标题】:SQLite3::SQLException: no such column: after upgrading to Rails 4.1.8SQLite3::SQLException:没有这样的列:升级到 Rails 4.1.8 后
【发布时间】:2014-11-27 15:20:29
【问题描述】:

我的应用程序使用当前代码已经运行了一年多,但升级到 Rails 4.1.8 后出现以下错误:

这是一个音乐评论网站,用户有很多 pin,即评论,pin 属于用户。引脚有一个“年份”,它是一个字符串。用户对他们评论的专辑进行排名,以便该网站将创建他们今年的前十名列表。此页面显示所有发布前十名的用户。

页面控制器:

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

【问题讨论】:

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


    【解决方案1】:

    我找到了答案,希望这对升级 Rails 的其他人有所帮助。这里有一篇很棒的博文:http://blog.arkency.com/2013/12/rails4-preloading/

    在升级 Rails 的过程中,我需要将 config.eager_load = false 添加到我的 development.rb 文件中

    您可以在该博客文章中阅读 .includes 与 .eager_load 的精彩解释,但通过将 .eager_load 更改为 false,activerecord 查询无法连接这两个表。

    我变了

    @users = User.includes(:pins).where('pins.year=?', '2013')
    

    @users = User.eager_load(:pins).where('pins.year=?', '2013')
    

    一切又都正常了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-19
      • 2022-08-15
      • 2013-10-09
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2017-02-22
      • 2020-10-18
      相关资源
      最近更新 更多