0

これは簡単なはずです。ただし、質問にタイトルを付ける方法が正確にはわかりません。CMS (ページ、リンク、フォームなど) に追加できるモジュールのコレクションがあります。それらはすべて、ポリモーフィック アソシエーションを介して、祖先やそれらが有効かどうかなどの一般的なものを管理する 1 つのテーブルに関連付けられています。たとえば、「ページ」を作成しているので、この他のテーブル レコードの作成を自動的に処理します。それに渡す必要があるのは、parent_id だけです。これを行うために、ページ モデルを介してプロキシを作成しました。

  def parent_id=(parent_id)
    @parent_id = parent_id.blank? ? nil : parent_id.to_i
    component_instance.parent_id = @parent_id
  end

  def parent_id
    @parent_id ||= component_instance.parent_id
  end

component_instance は多態的な関連です。

ページにparent_idが設定されている場合、空白かどうかを確認するために魔法のチェックを行っていることがわかります。空白の場合は@parent_id値をnilに設定し、そうでない場合は整数に変換してから割り当てますpage/component_instance コンボ全体がデータベースに保存されるときに、必要に応じてそれを適用する component_instance 。

blank? nil : parent_id.to_iフォーム セレクター ヘルパーは整数を想定しており、id の文字列値では機能しないため、私はこの作業を行う必要がありました。

問題は、これを正しい方法で行っているか、または存在するかどうかに応じて文字列 ID を nil または整数に変換するより良い方法があるかどうかです。

4

1 に答える 1

0

これらの「仮想」属性の設定を、「実際」の実際のモデルに委譲することになりました。

delegate :parent_id, :parent_id=, :to => :component_instance, :allow_nil => true

最初に属性を型キャストする必要がなくなります。

于 2012-11-15T03:15:58.947 に答える