ActiveScaffold - при вставке новой записи, как включить поля ввода для столбца / модели, которой принадлежит создаваемая модель - PullRequest
1 голос
/ 16 февраля 2011

У меня есть следующая схема базы данных:

 create_table "addresses", :force => true do |t|
    t.string   "road"
    t.string   "city"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "client_id"
  end

  create_table "clients", :force => true do |t|
    t.integer  "address_id"
    t.integer  "order_id"
    t.string   "first_name"
    t.string   "last_name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "orders", :force => true do |t|
    t.integer  "order_id"
    t.integer  "client_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
end

и модели:

class Client < ActiveRecord::Base
    belongs_to :address
end

class Order < ActiveRecord::Base
    belongs_to :client
end

class Address < ActiveRecord::Base
end

Цель этой настройки - иметь записи о множестве Клиентов, у каждого Клиента есть адрес. Несколько клиентов могут иметь один и тот же адрес. Для этого используется client_id в таблице адресов.

Когда я захожу в представление / Clients ActiveScaffold и нажимаю кнопку «Создать», я могу ввести данные для нового клиента, включая данные о новом адресе для клиента.

Но, когда я захожу в представление / Orders и нажимаю кнопку create, я могу добавить нового Клиента и ввести для него данные, но для адреса есть только поле выбора, которое можно использовать только для выбора существующего адреса. , нет полей для создания нового адреса для нового клиента. Как я могу включить поля адреса для нового клиента, чтобы создать новый адрес для клиента?

Заранее спасибо

1 Ответ

0 голосов
/ 23 февраля 2011

На самом деле ActiveScaffold не стоит слишком далеко, но ассоциации в ваших таблицах выглядят немного странно - у вас есть внешний ключ с обеих сторон отношения, а именно:

адреса имеет client_id

и

клиенты имеет address_id

Я бы подумал, что строго необходима только одна сторона, например, client_id на адресах .

Возможно, связано, но у вас есть принадлежность_ к каждой стороне отношения - возможно, одна сторона должна быть отношением has_one , то есть:

class Client
  has_one :address
end

class Address
  belongs_to :client
end

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

...