【发布时间】:2015-05-25 09:41:18
【问题描述】:
我一直在尝试创建类似于下面列出的数据库的关系,使用 devise 创建 Customer 表。我已经使用 ID 通过表名和 ID 为其他表创建了迁移。我的模型如下所示。我知道我在 has_many 关系上做得太过火了,但我整天都在尝试这个。
任何人都可以帮助或显示设置此的正确方法,以便我可以创建、编辑和更新用户地址。我使用简单的嵌套属性(例如 Customer/Direct to address)取得了成功,但是当我将表格放在中间时,我无法让地址属性显示或更新。
我想还有一个更复杂的编辑、创建、销毁方法也需要实现。
我也迷失了如何在这种类型的嵌套上允许强参数,因为我能找到的大多数示例仅将它连接到包含 user_id 的表,而不是通过另一个表连接的表。
提前为指导喝彩。
表格 客户 / 设计表默认值
客户地址 ID address_id address_type_id customer_id
地址 ID 地址 xzy Marua Road 其他细节/前屋
地址类型 ID address_type / 家庭、商业等 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
【问题讨论】:
标签: ruby-on-rails-4 devise nested-attributes has-many-through