2011-08-11 9 views
3
class Contest < ActiveRecord::Base 
    has_one :claim_template 
end 

class ClaimTemplate 
    include Mongoid::Document 
    belongs_to :contest 
end 

# console 
Contest.new.claim_template 
#=> NoMethodError: undefined method `quoted_table_name' for ClaimTemplate:Class 

OK、のはClaimTemplatequoted_table_nameを追加してみましょう。MongoidとActiveRecordの関係:未定義のメソッド `quoted_table_name」

def self.quoted_table_name 
    "claim_templates" 
end 

# console 
Contest.new.claim_template 
#=> nil 
# Cool! 
# But: 
Contest.last.claim_template 
#=> TypeError: can't convert Symbol into String 

それでは、どのように私は私のモデルが互いに

PSで正しく動作するように設定することができます:

今私はうまく動作するこの構造を持っていますが、私はR寛解(Assosiations)。

class Contest < ActiveRecord::Base 
    # has_one :claim_temlate 
    def claim_template 
    ClaimTemplate.where(:contest_id => self.id).first 
    end 

    # Mongoid going to be crazy without this hack 
    def self.using_object_ids? 
    false 
    end 
end 
+0

何「関係のメリットは、」あなたが望んでいますか? ActiveRecordのアソシエーションは、アソシエーション内の両方のモデルがActiveRecordオブジェクトであるという前提の下で動作するため、 'has_one'と' belongs_to'の動作をまとめて取得することはほとんどありません。 –

+0

@Michael Fairley、コンテストを通じて新しいCleimTemplateを作成し、ネストされたフォームを作成し、 'accepts_nested_attributes_for 'などのように' Associations'メソッドを使用したいと思います。 'Mongoid'と' ActiveRecord'が単なる抽象であり、彼らは簡単にこの振る舞いを扱うことができる限り、それらの両方を一緒に使用するのに問題はありません。 – fl00r

+0

@ fl00r MongoidとActiveRecordは抽象であり、 ActiveModelですが、彼らが全く同じAPIを公開し、リレーションのメタデータを互換性のある方法で保存しない限り(AFAIKはそうではありません)、私はあなたがこの種のクロスオーバー関係を働かせることはできませんコースを書き直すことなく)。 – brahmana

答えて

2

これがまだ正式に実装されているかどうかはわかりません。協会は、リレーショナル表の考え方にハードコードされている、ActiveRecord::Reflectionを通じて主に取り扱われ、このクラスを参照してください。

ことが示唆されているものActiveRecordの団体は、のようなものを扱うことができます方法がないということですモンゴイド。

Mongoid用の同様のリフレクションラッパーを作成するか、手動で関連するオブジェクトを手動で構築することによって、この問題を解決するための宝石を作成することをお勧めします。

3

通常の関連ではなく、t_has_one、t_has_many、およびt_belongs_toを使用して、あなたが望むように思えるTenacityと呼ばれる面白い宝石があります。

現在のところ、これらのリレーションシップは限られているため、現在多対多に苦しんでいますが、それはあなたを助けるかもしれません。

ここでそれをチェックアウト - https://github.com/jwood/tenacity

+0

あなたはこれについて他の宝石を提案できますか? –

+0

私はこれを投稿した直後から(私は別のプロジェクトに移った)、Mongoに触れていないので、現在の風景がどういうものなのか分かりません。 – abradner

関連する問題