Ruby on rails 改革创业板:对多种形式使用一个模型

Ruby on rails 改革创业板:对多种形式使用一个模型,ruby-on-rails,ruby,forms,reform,Ruby On Rails,Ruby,Forms,Reform,我正在使用Reform gem制作一个表单对象,以便在我的web商店中结帐。我有一个包含订单模型属性的签出表单,它与地址模型有关联 问题是订单模型与同一地址模型有两个关联: class Order < ActiveRecord::Base #... belongs_to :billing_address, :class_name => 'Address' belongs_to :shipping_address, :class_name => 'Address'

我正在使用Reform gem制作一个表单对象,以便在我的web商店中结帐。我有一个包含订单模型属性的签出表单,它与地址模型有关联

问题是订单模型与同一地址模型有两个关联:

class Order < ActiveRecord::Base
  #...
  belongs_to :billing_address, :class_name => 'Address'
  belongs_to :shipping_address, :class_name => 'Address'
  #...
end
他给了我错误

undefined method `active_record' for #Declarative::Heritage:0x007ff6ea6fb038

那么,在改革中是否有任何标准的方法来实现上述目标?或者有人能看出我做错了什么吗?谢谢

我意外地找到了答案。实际的问题是我的模块名是Address,这是我的一个模型的确切名称。这显然引起了一些冲突。所以我把地址改成了AddressModule

我的工作设置是:

class Checkout < Reform::Form
  extend ::ActiveModel::Callbacks
  #...
  property :billing_address, populate_if_empty: Address, form: BillingAddress 
  property :shipping_address, populate_if_empty: Address, form: ShippingAddress 
  #...
end

class BillingAddress < Reform::Form
  extend ::ActiveModel::Callbacks
  include AddressModule
end

class ShippingAddress < Reform::Form
  extend ::ActiveModel::Callbacks
  include AddressModule
end

module AddressModule
  include Reform::Form::Module

  property :firstname
  property :lastname
  property :address1
  property :address2
  property :phone
  property :city
  property :zipcode
  property :country_id
  property :billing_address_for_id
  property :shipping_address_for_id

  validates :firstname,
            :lastname,
            :address1,
            :phone,
            :city,
            :zipcode,
            :country_id,
            presence: true

  # provided by phony_rails gem
  # validates phone number to be correct and plausible 
  # without country accordance
  validates :phone, phony_plausible: { ignore_record_country_code: true }

  # provided by validates_zipcode gem
  # validates zipcode to be correct due to country alpha2 code
  validates :zipcode, zipcode: { country_code: :country_code }
end
类签出
我意外地找到了答案。实际的问题是我的模块名是Address,这是我的一个模型的确切名称。因此,它显然产生了一些冲突。
@checkout = Checkout.new(@order)
undefined method `active_record' for #Declarative::Heritage:0x007ff6ea6fb038
class Checkout < Reform::Form
  extend ::ActiveModel::Callbacks
  #...
  property :billing_address, populate_if_empty: Address, form: BillingAddress 
  property :shipping_address, populate_if_empty: Address, form: ShippingAddress 
  #...
end

class BillingAddress < Reform::Form
  extend ::ActiveModel::Callbacks
  include AddressModule
end

class ShippingAddress < Reform::Form
  extend ::ActiveModel::Callbacks
  include AddressModule
end

module AddressModule
  include Reform::Form::Module

  property :firstname
  property :lastname
  property :address1
  property :address2
  property :phone
  property :city
  property :zipcode
  property :country_id
  property :billing_address_for_id
  property :shipping_address_for_id

  validates :firstname,
            :lastname,
            :address1,
            :phone,
            :city,
            :zipcode,
            :country_id,
            presence: true

  # provided by phony_rails gem
  # validates phone number to be correct and plausible 
  # without country accordance
  validates :phone, phony_plausible: { ignore_record_country_code: true }

  # provided by validates_zipcode gem
  # validates zipcode to be correct due to country alpha2 code
  validates :zipcode, zipcode: { country_code: :country_code }
end