2017-01-25 4 views
0

Rails 4.0.8を使用すると、インスタンスメソッド内でクエリが動作するが、メソッドがクラスに含まれているモジュールに移動されてしまうという奇妙な状況があります。Railsクエリはクラス内では動作しますが、モジュールでは失敗します

これは動作します:

class Filing < ActiveRecord::Base 
    ... 
    def owner_company 
    # Because of legacy database, we have to look up the company a view (Company) 
    Company.where(fileno: self.owner_fileno).first 
    end 
end 

このセットアップは動作しません:

class Filing < ActiveRecord::Base 
    include FilingSetup 
    def company 
    FilingSetup::owner_company(self) 
    end 
end 

module FilingSetup 
    def self.owner_company(filing) 
    # Oddly, this query continually returns nil 
    Company.where(fileno: filing.owner_fileno).first 
    end 
end 

そして、私は(PRYを使用して)モジュール内のクエリの時点で壊れた場合、私は、クエリを実行することができますPryコンソールでうまく結果を得ることができます。

私は何かが分かりませんでしたか?または、レガシーデータベースとの接続問題に対して私は反対です。 (会社はactiverecord-sqlserver-adapterを使用してSQLServerデータベース内のビューに対してクエリを実行しています)

多くのありがとうございました!

答えて

0

私はあなたの問題があると思う:FilingSetup::owner_company(self)

あなたはこれを試すことができます。

class Filing < ActiveRecord::Base 
    include FilingSetup 
    def company 
    Filing.owner_company(self) 
    end 
end 

module FilingSetup 
    def self.owner_company(filing) 
    # Oddly, this query continually returns nil 
    Company.where(fileno: filing.owner_fileno).first 
    end 
end 
+0

ありがとう、Khanhですが、(FilingSetup :: owner_companyの代わりに)FilingSetup.owner_companyを呼び出しても違いはありません。しかし、私が発見したのは、モジュールのクエリの直前にbinding.pryステートメントを追加すると、Pryをトリガしなくても動作させることができます。だから、私はここで思っているいくつかの記憶奇妙なものと戦っているようだ、確かにそのような基本的なコードから期待どおりに働いているようではない。 – tjg

0

は完全に...私のミスを、それを手に入れました。

モジュール内のクエリは、「」一連の条件後の次の行だった:

case... 
when 1, # ... 
    2, # ... 
    3, # ... 
    owner_company = Company.where(fileno: filing.bn_owner_fileno).first 

と私が「3」の後に余分なコンマを見たことがなかったです。良い悲しみ!すべて今良い。

関連する問題