1

RailsとRubyは初めてです。Rails3.2.11アプリにData-Context-Interaction/akaDCI/パラダイムを実装しようとしています。Userモデルとone-to-manyの関連性のあるモデルがありTopicます。にミックスインを書き込もうとしてUserいますが、機能していません。デバッグのヘルプを提供してください。

私のミキシングは次のようになります:

module Speaker

  extend ActiveSupport::Concern

  included do
    has_many :assigned_topics, class_name: 'Topic', foreign_key: 'speaker_id'
  end

  def add_topic(topic)
    topic.speaker = self
    topic.save
  end

  def remove_topic(topic)
    topic.speaker = nil
    topic.save
  end
end

以下のコードを実行すると、エラーが発生します。

u = User.first
u.extend Speaker
u.assigned_topics
NoMethodError: undefined method `assigned_topics' for #<User:0x00000002f5dca8>
4

1 に答える 1

4

RailsではDCIパターンを使用しないでください。少なくとも、ある程度のトラフィックが予想される場合。現在、既存のオブジェクトの拡張は非常に遅いです。これは、すべてのruby実装のキャッシュメカニズムをクラッシュさせます。

過去数週間、この過大評価されたものについていくつかのあいまいさがあったことは知っていますが、実際には、このように使用しないでください。それは大きな面倒であり、周りにはたくさんのドラマがあります。RailsはJavaフレームワークではないため、Javaのような問題はありません。

モデルからモジュールにデータを移動する場合は、単純な懸念事項を使用して、モデルにハードコードして含めます。実行時およびすべてのフープでのライブ拡張はありません。これが@dhhからの使い方の要点です:https ://gist.github.com/1014971

于 2013-01-14T08:05:14.933 に答える