:包含和表别名

don*_*ndo 9 ruby-on-rails

我遇到了这里描述的问题的变体:

ActiveRecord非常不可预测地为关联连接分配表别名.与给定表的第一个关联保留了表名.与该表的关联的进一步连接使用别名,包括路径中的关联名称......但是应用程序开发人员通常不在编码时知道[其他]连接.

在我的情况下,我被has_many和include的有毒混合物所困扰.我的架构中的许多表都有一state列,而has_many想要在该列上指定条件:has_many :foo, :conditions => {:state => 1}.但是,由于状态列出现在许多表中,因此我通过显式指定表名来消除歧义:has_many :foo, :conditions => "this_table.state = 1".

到目前为止,这种方法运行良好,为了提高效率,我想添加一个:include预加载相当深的数据树.这会导致表在不同的代码路径中不一致地出现别名.我对上面引用的票证的解读是这个问题不是也不会在Rails 2.x中修复.但是,我没有看到任何方法来应用建议的解决方法(在查询中明确指定别名表名称).我很高兴在has_many语句中明确指定表别名,但我没有看到任何方法这样做.因此,解决方法似乎不适用于这种情况(我认为,在许多'named_scope'方案中)也没有.

有可行的解决方法吗?

zed*_*xff 0

就像是

:conditions => { :this_table => { :state => 1 } }
Run Code Online (Sandbox Code Playgroud)

  • 在猜测时测试你的答案被认为是一个很好的做法。散列中的第一个条目是表的列。[2010-06-02 15:16:42] [DEBUG] ThisTable Load (0.000000) Mysql::Error: #42S22'where 子句' 中的未知列 'this_table.this_table': SELECT * FROM `this_table` WHERE (`this_table` .`this_table` = '--- - :state - 1 ') (2认同)