ネストされたモデル

実装が少し複雑になりますが大変便利な機能です。

form_forのモデルが子モデルを持っていた場合field_forが使える(使わなくても扱えるが)。

http://railsdoc.com/references/fields_for

1:n n:m の場合も使える。new,editの場合はidに注意。JQueryなどと組み合わせて可変数のアイテムの追加・削除・編集を 行う画面を作れます。

ネストしたモデルの入力フォーム実装

項目削除

allow_destoryが必要。

accepts_nested_attributes_for :sub_model, :allow_destroy ⇒ true

hiddenフィールドなどで_destroyパラメータに1をセットすると自動的にフィールドが削除されます。

特定の場合は追加しない

項目入力欄を追加したが、全てブランク、特定の項目がブランクの場合には、自動的に新規レコードを作成しないことができます。 入力欄は出したが特に追加する必要がなかったので、そのまま送信ボタンを押してしまった場合に、不要なレコードが追加されるのを 防ぐことができて大変便利です。

titleがブランクの場合には追加しない。

accepts_nested_attributes_for :items , :allow_destroy => true, :reject_if => :reject_posts

def reject_posts(attributed)
  attributed['title'].blank?
end

全ての広告がブランクの場合には追加しない(全てブランクなのであまり実用的ではありません)

accepts_nested_attributes_for :items, :reject_if => :all_blank
rubyonrails/view/nested_model.txt · 最終更新: 2012/09/21 18:21 (外部編集)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0