【问题标题】:ambiguous column name for a many to many association多对多关联的不明确列名
【发布时间】:2014-01-30 18:48:12
【问题描述】:

我正在尝试为多对多关系创建复选框。

一个project 可以有多个graphs。一个graph 可以属于多个projects

我正在关注this question 的答案,并使用了 collection_check_boxes()。

<%= collection_check_boxes(:project, :user_graph_ids, UserGraph.all, :id, :title) %>

结果是关于不明确列的 SQL 错误。为什么会出现这种情况?

SQLite3::SQLException: ambiguous column name: created_at: 
  SELECT "user_graphs".id 
  FROM "user_graphs" 
  INNER JOIN "project_user_graphs" 
  ON "user_graphs"."id" = "project_user_graphs"."user_graph_id" 
  WHERE "project_user_graphs"."project_id" = ?  
  ORDER BY created_at DESC

【问题讨论】:

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


    【解决方案1】:

    强制UserGraph.all 的顺序使用user_graphs 表中的created_at

    <%= collection_check_boxes(:project, :user_graph_ids, UserGraph.all.order("user_graphs.created_at ASC"), :id, :title) %>
    

    注意:我最终会将其作为范围推入 UserGraph 模型中:

    class UserGraph < ActiveRecord::Base
      def self.ordered(direction="asc")
        order("user_graphs.created_at #{direction}")
      end
    end
    
    <%= collection_check_boxes(:project, :user_graph_ids, UserGraph.all.ordered, :id, :title) %>
    

    【讨论】:

    • 仍然不适用于顶部更改。我以为你忘记了ASC" 之后的右括号:&lt;%= collection_check_boxes(:project, :user_graph_ids, UserGraph.all.order("user_graphs.created_at ASC"), :id, :title) %&gt; - 错误是一样的
    • 有趣的是,我们指定 UserGraph 的顺序并没有影响 SQL 查询。也许查询是由 Project + UserGraph 之间的关联自动创建的?
    • 奇怪。您可以发布UserGraph 模型中的关联吗?
    • 是的,现在编辑问题,顺便说一句,用你的新代码它给出了这个错误wrong number of arguments (3 for 5..7) 看起来括号在错误的地方:P
    猜你喜欢
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2016-03-04
    • 2017-12-23
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多