Как спроектировать модель с двумя независимыми и необязательными отношениями к одной модели? - PullRequest
0 голосов
/ 29 сентября 2011

У меня проблема с проектированием моей User модели и созданием приличной формы для нее.Я просто хочу убедиться, что я делаю это неправильно :) Итак, это выглядит так:

User имеет два Address es:

  • обязательный Address для идентификации и выставления счета,
  • дополнительная доставка Address, которую он мог заполнить или оставить пустым

Я пытался так:

class User < ActiveRecord::Base
  has_one :address
  has_one :shipping_address, :class_name => 'Address', :foreign_key => 'shipping_address_id'
  accepts_nested_attributes_for :address
  accepts_nested_attributes_for :shipping_address
  #validations for user
end

и:

class Address < ActiveRecord::Base
  #validations for address
end

А затем я делаю форму для User, используя form_for и вложенную fields_for.Например:

= form_for @user, :url => '...' do |a|
  = f.error_messages
  ...
    = fields_for :address, @user.build_address do |a|
      ...

Но тогда, несмотря на то, что f.error_messages генерирует ошибки для всех моделей, поля для Address es не подсвечиваются при ошибке.

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

И у меня есть сомнения в правильности моего подхода.Я имею в виду отношение has_one и общий дизайн этого устройства.

Итак, вопрос:

Я делаю это неправильно?Как бы ты сделал это на моем месте?

1 Ответ

1 голос
/ 29 сентября 2011

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

В вашем контроллере, в действии new вы должны сделать что-то вроде

@user.build_address

и на ваш взгляд напишите:

= fields_for :address, @user.address do |a|

Надеюсь, это поможет.

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