QA@IT

ActiveRecord抽象クラスのscope継承について

2265 PV

該当するissueも見つかったのですが、現在の状態が理解できなかったので質問させてください。
以下、具体例を引用します。

abstract_class=true なモデルで定義された scope を派生クラスで使用すると、生成される SQL からテーブル名が欠落してエラーとなる(SQL のシンタックスエラーとなる)という問題です。
具体例を挙げます。
次のような abstract_class=true なモデルを作成し、その中に適当な scope を作成します。

class ModelBase < ActiveRecord::Base
  # abstract_class=true なモデルで適当な scope を定義する.
  self.abstract_class = true
  scope :trivial, -> { where('TRUE') }
end

そのモデルを継承します。

class User < ModelBase
end

継承したモデルで親クラス(ModlelBase)で定義された scope を呼び出すと、テーブル名が欠落した SQL が生成されてしまいます。

で、本題のissueが下記のリンクです。

最後に

Soooo.... is this an unsolvable issue??
I don't know why I thought a patch was already merged and ready in 4.0.1 :worried:

とありますが、4.0.1のRailsでは解決済みと理解したのですが、

  • Rails 4.0.2 (ActiveRecord 4.0.2)
  • Ruby 2.0.0

の環境で、例と同様に以下のエラーが出ます。

    SELECT
        "" . *
    FROM
        ""
    ORDER BY
        "" . id DESC LIMIT 10 OFFSET 0
PG::SyntaxError: ERROR:  zero-length delimited identifier at or near """"
LINE 1: SELECT  "".* FROM ""   ORDER BY "".id DESC LIMIT 10 OFFSET 0
                ^
: SELECT  "".* FROM ""   ORDER BY "".id DESC LIMIT 10 OFFSET 0
  Rendered accounts/special_users/_special_users.html.erb (93.6ms)
  Rendered customers/index.html.erb within layouts/seller (140.4ms)
Completed 500 Internal Server Error in 680ms

ActiveRecord::StatementInvalid - PG::SyntaxError: ERROR:  zero-length delimited identifier at or near """"
LINE 1: SELECT  "".* FROM ""   ORDER BY "".id DESC LIMIT 10 OFFSET 0

どういう状態なのでしょうか、理解できませんでした。
どうぞご教授ください。

ウォッチ

この質問への回答やコメントをメールでお知らせします。