Devise - Вложенные атрибуты - Клиент --› Customer_addresses --› Адрес

Я пытался создать отношения, такие как база данных, указанная ниже, используя devise для создания таблицы Customer. Я создал миграции для других таблиц, используя идентификатор, используя имена таблиц и идентификатор. Мои модели выглядят так, как показано ниже. Я знаю, что переборщил с отношениями has_many, но я пробовал это весь день.

Может ли кто-нибудь помочь или показать правильный способ настройки, чтобы я мог создавать, редактировать и обновлять адреса пользователя. Мне удалось добиться успеха с помощью простых вложенных атрибутов, например, клиент/прямой адрес, но когда я помещаю таблицу посередине, я просто не могу получить атрибуты адреса для отображения или обновления.

Я предполагаю, что есть более сложный метод редактирования, создания, уничтожения, который также необходимо реализовать.

Я также теряюсь в том, как разрешить сильные параметры для этого типа вложенности, поскольку большинство примеров, которые я могу найти, связаны только с таблицами, которые содержат user_id, а не с той, которая подключена через другую таблицу.

ура заранее для руководства.

изображение DataModel здесь

Таблицы customers / Таблицы Devise по умолчанию

адреса_клиентов id address_id address_type_id customer_id

адреса id address xzy Marua Road другие детали / Front house

address_type id address_type / Home , Business и т. д. address_type_description / Где вы живете и т. д.

class Customer < ActiveRecord::Base
has_many :customer_addresses
has_many :addresses
has_many :address_types

accepts_nested_attributes_for :customer_addresses
accepts_nested_attributes_for :address_types
accepts_nested_attributes_for :addresses
end

class UserAddress < ActiveRecord::Base
has_many :customer
has_many :address_types
has_many :addresses
end

class AddressType < ActiveRecord::Base
belongs_to :customer_address
end

class Address < ActiveRecord::Base
belongs_to :user_address
end

  <div class="field">
    <%= f.fields_for :user_addresses do |ff| %>
        <div>
          <%= ff.label :address_id %><br />
          <%= ff.text_field :address_id %>
            <%= ff.fields_for :address do |fff| %>
              <%= fff.label :address %><br />
              <%= fff.text_field :address %>
          <% end %>
    <% end %>
        </div>
    </div>

user controller params

 def user_params
params.require(:user).permit(:id, :username, :first_name, :last_name, :email, :password, :password_confirmation,
                            user_address_attributes:[:user_is, :address_id, :address_type_id],
                            addresses_attributes:[:id, :address, :other_address_details ],
                            address_type_attributes:[ :id, :address_type])
  end


person Jason Moreland Digitalrecline    schedule 25.05.2015    source источник


Ответы (1)


Определенные вами ассоциации должны были выглядеть следующим образом.

class Customer
  has_many :customer_addresses
  has_many :addresses, :through => :customer_addresses
  has_many :address_types, :through => :customer_addresses
end

class Address
  has_many :customer_addresses
  has_many :customers, :through => :customer_addresses
  has_many :address_types, :through => :customer_addresses
end

class AddressType
  has_many :customer_addresses
  has_many :customers, :through => :customer_addresses
  has_many :addresses, :through => :customer_addresses
end

class CustomerAddress
  belongs_to :customer
  belongs_to :address
  belongs_to :address_type
end
person Kamesh    schedule 25.05.2015
comment
Ваше здоровье. Я попробую. - person Jason Moreland Digitalrecline; 25.05.2015
comment
По-прежнему возникают проблемы с доступом к полю адреса. Но дальше, чем прежде. - person Jason Moreland Digitalrecline; 25.05.2015
comment
Добавил фрагмент формы. получает address_id, если из таблицы user_address, но может заставить его перейти к следующему шагу и извлечь из таблицы адресов. - person Jason Moreland Digitalrecline; 25.05.2015
comment
приближаться. Теперь подключите его к форме и покажите сохраненную информацию :-))) значительное улучшение. Просто не получается сохранить. Необходимо добавить столбец user_addresses_id в таблицу адресов. - person Jason Moreland Digitalrecline; 25.05.2015
comment
Удивительные вещи идут на работу. Полную версию скину утром. Приветствую толчок в правильном направлении. :-) пытался проголосовать, но говорит, что мне нужно больше представителей. - person Jason Moreland Digitalrecline; 25.05.2015