2012-04-05 1 views
1

У меня есть следующая полиморфная ассоциация создана с acts_as_relationполиморфизма и вложенные атрибуты

polymorphic association

код модели: код

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 
+0

Так что насчет вопроса? –

+0

Я не могу реализовать вложенные атрибуты. Я думаю, было бы легче, если бы не было никакого полиморфизма, но я не уверен, что здесь проблема - я думаю, что это было разрешено с act_as_relation. Тем не менее, я борюсь с вложенными атрибутами. – Jonathan

+0

Не могли бы вы предоставить более подробную информацию о точном месте проблемы. Например. Генерация HTML, форма submit, или просто нет ничего (ничего не создано)? –

ответ

1

Если у вас есть проблемы с добавлением nested_attributes, это может быть интересно посмотреть на https://github.com/ryanb/nested_form

+0

Захватывающий драгоценный камень, я проверю его. – Jonathan