Ruby on rails 改革创业板:对多种形式使用一个模型
我正在使用Reform gem制作一个表单对象,以便在我的web商店中结帐。我有一个包含订单模型属性的签出表单,它与地址模型有关联 问题是订单模型与同一地址模型有两个关联: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'
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