Как сделать заказ адрес доставки и адрес выставления счета в рельсах - PullRequest
3 голосов
/ 07 апреля 2009

В моем интернет-магазине каждый заказ связан с адресом доставки и адресом для выставления счета (конечно, они могут быть одинаковыми). Это моя первая попытка смоделировать это:

Class Order
  belongs_to :billing_address, :class => "Address"
  belongs_to :shipping_address, :class => "Address"

Это работает довольно хорошо, но теперь помощники по формам не работают. Т.е., form_for будет генерировать только поля с именами, такими как address[zipcode], поэтому я должен вручную взломать его, чтобы получить billing_address[zipcode] и shipping_address[zipcode].

Полагаю, я мог бы использовать наследование одной таблицы для подкласса Address в ShippingAddress и BillingAddress, но мне это кажется немного хакерским (и противоречит некоторым хорошим ответам в Лучший способ моделирования Customer <- -> Адрес ).

Ответы [ 2 ]

3 голосов
/ 08 апреля 2009

Вам необходимо указать имя класса, так как это не BillingAddress или ShippingAddress.

class Order < ActiveRecord::Base
  # foreign key not required here because it will look for
  # association_name_id, e.g. billing_address_id, shipping_address_id
  belongs_to :billing_address, :class_name => "Address"
  belongs_to :shipping_address, :class_name => "Address"
end

Для завершения ассоциации:

class Address < ActiveRecord::Base
  # foreign key required here because it will look for class_name_id, 
  # e.g. address_id
  has_many :billing_orders, :class_name => "Order", 
    :foreign_key => "billing_address_id" 
  has_many :shipping_orders, :class_name => "Order", 
    :foreign_key => "shipping_address_id"
end
2 голосов
/ 07 апреля 2009

У меня есть две идеи для вас, одна или обе из них могут помочь:

Class Order
  belongs_to :billing_address, :class_name => "Address"
  belongs_to :shipping_address, :class_name => "Address"

Class Order
  belongs_to :address, :foreign_key => "billing_address_id"
  belongs_to :address, :foreign_key => "shipping_address_id"

Пожалуйста, дайте им попытку с вашими помощниками, и мне будет интересно узнать, сработает ли это для вас. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...