2016-07-06 4 views
0

私は共有のARモデルと他のものの束を保つ共有エンジンを持っています。以下 は私のユーザーARモデルRailsエンジンモデルから継承するときの関連問題

module Shared 
    class User < ApplicationRecord 
    validates_presence_of :password, on: :create 
    # validates_uniqueness_of :email 
    # validates_uniqueness_of :phone_number 

    has_many :apps 
    end 
end 

されており、次のように私は、メインレールのアプリ(Analytics)内の子のユーザーを持っている:

class User < Shared::User 
    self.table_name = 'users' 
end 

私はレールのアプリにこのエンジンをマウントするときに、動的にI私は、挿入データベースのレコードを見つけることが、私は連想を使用する際の問題を開始することができ、上記で

def model_const(const) 
    # shell_app is set to 'Analytics' somewhere else 
    shell_app.constantize.const_get const 
rescue 
    Shared.const_get const 
end 

:法の下に使用して「修正」(Analytics::User)を見つけます

user = model_const('User').create ... # works, returns a Analytics::User instance 
user.apps # fails with below error 

(例えばvalidates_uniqueness_of呼び出し上記)iationsとARのバリデータも

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "shared_apps" does not exist 
LINE 8:    WHERE a.attrelid = '"shared_apps"'::regclas... 
            ^
:    SELECT a.attname, format_type(a.atttypid, a.atttypmod), 
       pg_get_expr(d.adbin, d.adrelid), a.attnotnull,  a.atttypid, a.atttypmod, 
     (SELECT c.collname FROM pg_collation c, pg_type t 
      WHERE c.oid = a.attcollation AND t.oid = a.atttypid AND a.attcollation <> t.typcollation), 
       col_description(a.attrelid, a.attnum) AS comment 
      FROM pg_attribute a LEFT JOIN pg_attrdef d 
       ON a.attrelid = d.adrelid AND a.attnum = d.adnum 
      WHERE a.attrelid = '"shared_apps"'::regclass 
      AND a.attnum > 0 AND NOT a.attisdropped 
      ORDER BY a.attnum 
): 

(同じエラーが共有:: UserモデルにおけるI非コメントバリデータとは、新しいレコードを作成しようとした場合)私は作成しており、共有エンジンコードのappsにアクセスしようとしていることに注意してください。

ありがとうございます!

答えて

0

数時間を過ごした後、私が思いついた解決策がここにあります。

module Analytics class User.... end end

  • lib/shared.rb fileにこれを追加します:

    Analyticsモジュール内部の

    1. 巣外Userクラス(これは実際に私が最初の場所で行われているべきである、そうblame me

      def self.table_name_prefix end

    これは他の人に参考になると期待しています。