1

私はacts_as_relationで設定された次のポリモーフィックな関連付けを持っています

多形関連

モデルコード:

class Email < ActiveRecord::Base
  belongs_to :detail
  validates_presence_of :address
end


class Detail < ActiveRecord::Base
  acts_as_superclass
  has_many :emails
  accepts_nested_attributes_for :emails, allow_destroy: true
end

class User < ActiveRecord::Base
  acts_as :detail
  validates_presence_of :username, :password
end

移行コード:

class CreateInfo < ActiveRecord::Migration
  def change
    create_table :details, :as_relation_superclass => true do |t|
      t.timestamps
    end
  end
end

class CreateEmails < ActiveRecord::Migration
  def change
    create_table :emails do |t|
      t.string :address
      t.string :address_type
      t.string :detail_id

      t.timestamps
    end
  end
end

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :username
      t.string :password

      t.timestamps
    end
  end
end

複数の電子メールアドレス、アドレスなどを許可するフォームを (最終的には) 作成できるようにしたいと考えています。しかし、私はそれを機能させるのに苦労しています。私は、ビュー コードで返信する人には誰でも HAML を使用します。これははるかに読みやすいです。

現在、次のようなフォームがあります。

views/users/_form.html.haml

= form_for(@user) do |f|
  - if @user.errors.any?
    #error_explanation
      %h2
        = pluralize(@user.errors.count, "error")
        prohibited this user from being saved:
      %ul
        - @user.errors.full_messages.each do |msg|
          %li= msg
  .field
    = f.label :name
    = f.text_field :name
  .field
    = f.label :username
    = f.text_field :username
  .field
    = f.label :password
    = f.text_field :password
  = f.fields_for :emails do |ff|
    .field
      = ff.label :address, 'Email address'
      = ff.text_field :address
    .field
      = ff.label :address_type, 'Type'
      = ff.text_field :address_type
  .actions
    = f.submit
4

1 に答える 1

1

nested_attributes の追加に問題がある場合は、https://github.com/ryanb/nested_formを参照してください。

于 2012-04-05T12:01:38.390 に答える