ActiveScaffold - 插入新记录时,如何为正在创建模型“belongs_to”的列/模型启用输入字段

时间:2011-02-16 03:13:34

标签: ruby-on-rails activescaffold

我有以下数据库架构:

 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 :(得分:0)

并没有真正推动ActiveScaffold,但你的表上的关联看起来有点奇怪 - 你在关系的两边都有一个外键,即:

  

地址 client_id

  

客户 address_id

我认为只有一方是严格需要的,例如地址上的 client_id

可能相关,但你在关系的任何一方都有了belongs_to - 也许一方应该是has_one关系,即:

class Client
  has_one :address
end

class Address
  belongs_to :client
end

希望有帮助,克里斯。