如何使用相同的数据更新不同表上的三个相似字段?

时间:2017-12-20 11:37:37

标签: ruby-on-rails ruby

我有两个模型 Commuter RideLaterRequest

RideLaterRequest 表格如下所示。

create_table "ride_later_requests", force: :cascade do |t|
   t.string   "customer_name"
   t.string   "phone_number"
   t.string   "email"
end

这些列是从视图文件创建的,其中用户输入这些详细信息并由控制器操作创建。

def complete_booking_request
   #create a record of name, phone_number,email on RideLaterRequest
end

查看

<%= bootstrap_form_for @ride_later_request ,url: bookings_complete_booking_request_path, id: "get_otp_form", method: :post, remote:true do |f| %>

      <%= f.text_field :customer_name, hide_label:true, placeholder: 'Name', class:'form-control'%>
      <%= f.email_field :email,hide_label:true, placeholder: 'Email', class:'form-control' %>
      <%= f.telephone_field :phone_number, hide_label:true, placeholder: 'Mobile', class:'form-control'%>
<%end%>

现在我有另一个类似字段的模型 Commuter

 create_table "commuters", force: :cascade do |t|
         t.string   "phone_number"
         t.string   "first_name"
         t.string   "email"
  end

目前没有从模板创建通勤者数据的选项。两个表中的字段都应该携带相同的数据。好像早期的开发人员只是生成了表并离开了。如何在创建时将电话,电子邮件,姓名从 RideLaterRequest 更新为 Commuter 表?

2 个答案:

答案 0 :(得分:2)

你可以使用after_save回调来保存RideLaterRequest模型中的Commuter数据

    after_save { |ride_later_request_data|
      Commuter.create(
        phone_number: ride_later_request_data.phone_number,
        first_name: ride_later_request_data.customer_name,
        email: ride_later_request_data.email
      )
   }

或者你可以创建像这样的方法

    after_save :save_commuter_data

    private

    def save_commuter_data
      Commuter.create( 
        phone_number: self.phone_number, 
        first_name: self.customer_name, 
        email: self.email 
      )
   end

答案 1 :(得分:1)

您可以使用after_save / after_createActive Record Callbacks

在模型RideLaterRequest中,

after_save :copy_data_to_commuter

private

def copy_data_to_commuter Commuter.create( phone_number: self.phone_number, first_name: self.customer_name, email: self.email ) end

此处self.phone_number给出了正在保存的RideLaterRequest类对象的值。您也可以直接使用phone_number代替self.phone_number