首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计-嵌套属性-客户-> Customer_addresses ->地址

设计-嵌套属性-客户-> Customer_addresses ->地址
EN

Stack Overflow用户
提问于 2015-05-25 09:41:18
回答 2查看 48关注 0票数 0

我一直试图创建一个类似于下面列出的数据库的关系,使用devise来创建Customer表。我已经使用ID为其他表创建了迁移,但是表名和ID。我知道我在has_many的关系上做得太过火了,但是我已经尝试了一整天。

任何人都可以帮助或显示正确的方式来设置这一点,以便我可以创建,编辑和更新地址的用户。我使用简单的嵌套属性管理成功,比如Customer/ Direct to address,但是当我将表放在中间时,我就无法获得要显示或更新的address属性。

我想还有一个更复杂的编辑、创建、销毁方法也需要实现。

我也对如何允许这种类型嵌套的强参数感到困惑,因为我可以找到的大多数例子都是将其连接到包含user_id的表,而不是通过另一个表连接的表。

提前为指导干杯。

DataModel图像

customers / Devise默认值

customer_addresses id address_id address_type_id customer_id

地址 id地址xzy Marua路其他详细信息/前厅

address_type id address_type/ Home,Business等address_type_description /您居住的地方等

代码语言:javascript
复制
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

代码语言:javascript
复制
  <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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-25 10:52:18

您定义的关联应该如下所示

代码语言:javascript
复制
class Customer
  has_many :customer_addresses
  has_many :addresses, :through => :customer_addresses
  has_many :address_types, :through => :customer_addresses
end

class Address
  has_many :customer_addresses
  has_many :customers, :through => :customer_addresses
  has_many :address_types, :through => :customer_addresses
end

class AddressType
  has_many :customer_addresses
  has_many :customers, :through => :customer_addresses
  has_many :addresses, :through => :customer_addresses
end

class CustomerAddress
  belongs_to :customer
  belongs_to :address
  belongs_to :address_type
end
票数 0
EN

Stack Overflow用户

发布于 2015-05-25 11:32:47

代码语言:javascript
复制
class Customer < ActiveRecord::Base

  has_many :customer_addresses
  accepts_nested_attributes_for :customer_addresses

end

class AddressType
  has_many :customer_addresses

end

class CustomerAddress

 belongs_to :address_type
 belongs_to :customer
 belongs_to :address

 accepts_nested_attributes_for :address

 after_initialize :add_address, unless: 'address.present?'

 def add_address
    self.build_address
 end 

end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30435348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档