Rails表单,使用belongs_to关联保存nested_attributes

时间:2016-07-05 15:56:46

标签: ruby-on-rails ruby-on-rails-4 simple-form nested-forms nested-attributes

我在使用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

感谢阅读。

我的项目:

  • Ruby On Rails 4.2.6 / Ruby 2.2.2
  • 设计3.5.9
  • 简单形式3.1.0
  • Enumerize 1.1.0

0 个答案:

没有答案