【问题标题】:ActiveRecord StatementInvalid when getting data with globalize3使用 globalize3 获取数据时 ActiveRecord StatementInvalid
【发布时间】:2011-07-12 09:35:37
【问题描述】:

当我尝试获取指定艺术家的所有音频歌曲时,出现错误:

ActiveRecord::StatementInvalid: PGError: ERROR:  column reference "artist" is ambiguous
LINE 1: ... AND (audio_translations.artist IS NOT NULL) AND (artist = '...
                                                             ^
: SELECT "audios"."id" AS t0_r0, "audios"."audio_genre_id" AS t0_r1, "audios"."song" AS t0_r2, "audios"."artist" AS t0_r3, "audios"."file_id" AS t0_r4, "audios"."photo_id" AS t0_r5, "audios"."description" AS t0_r6, "audios"."position" AS t0_r7, "audios"."created_at" AS t0_r8, "audios"."updated_at" AS t0_r9, "audios"."date" AS t0_r10, "audio_translations"."id" AS t1_r0, "audio_translations"."audio_id" AS t1_r1, "audio_translations"."locale" AS t1_r2, "audio_translations"."artist" AS t1_r3, "audio_translations"."song" AS t1_r4, "audio_translations"."description" AS t1_r5, "audio_translations"."created_at" AS t1_r6, "audio_translations"."updated_at" AS t1_r7 FROM "audios" LEFT OUTER JOIN "audio_translations" ON "audio_translations"."audio_id" = "audios"."id" WHERE "audio_translations"."locale" = 'en' AND (audio_translations.artist IS NOT NULL) AND (artist = 'Andy')

我使用以下 AR 语句:

Audio.with_translations(I18n.locale).find(:all, :conditions => ["artist = ?", 'Andy'])

没有with_translations 方法也可以工作:

 >> Audio.find(:all, :conditions => ["artist = ?", 'Andy'])
 => [#<Audio id: 10, audio_genre_id: 1, song: "My heart, my life", artist: "Andy", file_id: 1, photo_id: nil, description: "...", position: 2, created_at: "2011-07-12 07:24:43", updated_at: "2011-07-12 08:31:21", date: "2011-07-12 07:24:00">] 

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord globalize3


    【解决方案1】:

    尝试改变

    Audio.with_translations(I18n.locale).find(:all, :conditions => 
      ["artist = ?", 'Andy'])
    

    Audio.with_translations(I18n.locale).find(:all, :conditions => 
      ["audios.artist = ? OR audio_translations.artist ?", 'Andy', 'Andy'])
    

    此查询对具有相同列的两个表进行 sql 连接

    【讨论】:

      【解决方案2】:

      ActiveRecord StatementInvalid is ambiguous 是 AR 的说法:先生,您的 SQL 语句没有意义,因为您正在检查的字段在多个表中找到,我不知道是哪个使用

      尝试在任何地方指定表名,例如audios.artistaudio_translations.artist

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-31
        • 2014-02-03
        • 2013-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多