1

ユーザーがこれを選択した場合にのみ、ページをレイアウトに添付する必要があります。

つまり、ユーザーがページを編集するときに、レイアウトを選択するためのドロップダウンがあります。

いくつかのレイアウトを選択するとうまく機能します。

ただし、ユーザーが<option value='0'> Noneオプションを選択すると、DataMapperlayout_idはゼロより大きい必要があるというエラーをスローします。

私はアソシエーションを設定したので、これは起こらないはずだと思います。required: falsebelongs_to :layout

これが私のモデルです:

class Layout

  include DataMapper::Resource

  property :id, Serial
  property :name, String

end

class Page

  include DataMapper::Resource

  property :id, Serial
  property :name, String

  belongs_to :layout, required: false

end
4

1 に答える 1

1

あなたは「内部」検証について正しいです。

関連付けによって自動的に追加されbelong_toます。

そして、プロパティを再定義することでそれを取り除くことができlayout_idます。

Pageモデルに追加するだけです。

property :layout_id, Integer, index: true

これにより、関連付けは維持されますが、layout_idプロパティが再定義されるため、
検証が自動的に追加されることはありません。

ただし、これは後でのみ機能することに注意してくださいPage.auto_migrate!

または、ページテーブルから外部キーを手動で削除することもできます。

また、layout_idインデックスであることを確認してください。そうしないと、パフォーマンスの問題が発生します。

于 2012-11-28T23:05:41.850 に答える