我在使用belongs_to
关联保存嵌套属性时遇到了一些麻烦。
我有一张表单可以传递新订单。在其中我希望Customer
确认他的一些信息。我能够显示当前的客户信息,但无法保存新信息。
有关我已经从current_customer
构建表单的信息,新订单将保存为Customer
无probs。我想要的是更新Customers
Order
信息
这是我的应用:
#Order Model
belongs_to :customer, inverse_of: :orders, validate: false
accepts_nested_attributes_for :customer
#Customer Model
has_many :orders, inverse_of: :customer, dependent: :destroy
accepts_nested_attributes_for :orders
#Order View new
= simple_form_for @order, validate: true do |f|
= f.association :customer do |c|
= c.input :phone
= c.input :mobile
= c.input :skype
#Order controller > #Strong parameters
customer_attributes: [
:id, :phone, :mobile, :skype
]
#Order controller
def new
@order = current_customer.orders.build
render 'customers/orders/new'
end
def create
@order = current_customer.orders.build order_params
if @order.save
flash[:notice] = t('order.create.flash.success')
redirect_to customers_path
else
render 'customers/orders/new'
end
end
#Order model > Validation
这是自定义验证,因为我们要求Customer
仅确认他选择的字段。
%i(phone mobile skype).each do |kind|
validate "#{kind}_validable".to_sym, if: "call_kind_#{kind}?".to_sym
define_method "#{kind}_validable" do
return unless !customer.nil? && customer.send(kind).blank?
errors.add "customer.#{kind}".to_sym, I18n.t("activerecord.errors.models.customer.attributes.#{kind}.blank")
end
end
enumerize :call_kind,
in: { phone: 0, mobile: 1, skype: 2 },
predicates: { prefix: true },
default: :mobile
感谢阅读。
我的项目: