Rails - 在保存之前为Active Association构建添加值

时间:2015-11-06 11:09:30

标签: ruby-on-rails ruby-on-rails-4

我想在保存之前将user_id添加到构建关联。我有一个复杂的形式有两个模型。

此代码位于我的new_order方法中:

@customer_order = CustomerOrder.new(:order_amt => @mailer.full_price, 
                                    :years   => @mailer.years, 
                                    :magazine_id => @mailer.magazine_id, 
                                    :mailer_id => @mailer.id,   
                                    :source => 'Mailer', 
                                    :lead_id => @mailer.lead.id, 
                                    :new_or_renewal => 'N', 
                                    :user_id  => current_user.id) 

@customer_order.payments.build

该关联完全按照我想要的方式保存。然后,当我单击以保存表单时,在创建方法中,我想将current_user_id添加到付款模型中。我试图不把它坚持在表格中,因为我听说这是一种不好的做法。

@customer_order.save

就在@customer_order.save之前,我想补充一下:

payment.user_id => current_user_id

2 个答案:

答案 0 :(得分:1)

试试这个:

@customer_order.payments.create(user_id: current_user_id)
@customer_order.save

答案 1 :(得分:0)

Rails只针对这个要求进行了回调,并且它被称为 - 非常简单 - before_save

before_save documentation

基本上,在您的模型中,您可以定义在保存活动记录之前要采取的某些步骤。

详细了解回调here

引用:

  

在Rails应用程序的正常操作期间,对象可能是   创建,更新和销毁。 Active Record提供了挂钩   这个对象生命周期,以便您可以控制您的应用程序和   它的数据。

     

回调允许您在更改之前或之后触发逻辑   对象的状态。