我有两个模型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表?
您可以使用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
你可以像Active Record Callbacks / after_save
一样使用after_create
。
在模型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