我有两个模型 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 表?
答案 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_create
等Active 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