У меня есть форма с вложенным объектом (клиент <заказ), и она работает, за исключением того, что она продолжает создавать новую запись о клиенте. </p>
Я бы хотел, чтобы он проверил, присутствует ли уже существующий клиент в базе данных (используя адрес электронной почты клиента для поиска), и если это так, просто прикрепите заказ к существующей записи, но если нет, продолжить создание новой записи о клиенте.
Я думаю Я должен сделать это с помощью вызова before_save
в моей модели order
, но я не знаю, как передать туда параметры формы (адрес электронной почты). Это правильный подход или есть какой-то другой способ?
приложение / модели / order.rb:
class Order < ActiveRecord::Base
belongs_to :customer
...
accepts_nested_attributes_for :customer
...
end
приложение / модели / customer.rb:
class Customer < ActiveRecord::Base
has_many :orders
...
end
приложение / контроллеры / orders_controller.rb:
def new
@order = Order.new
@order_number = "SL-#{Time.now.to_i}"
@order.customer = Customer.new
@services_available = Service.all
end
def create
@order = Order.new params[:order]
if @order.save
flash[:notice] = 'Order was successfully created.'
redirect_to @order
else
@order_number = "SL-#{Time.now.to_i}"
render :action => "new"
end
end
приложение / просмотров / заказ / new.html.haml:
%h1 New order
- form_for @order do |order_form|
= error_messages_for :order
%p
= order_form.label :order_number
%br
= text_field_tag '', @order_number, :disabled => true, :id => 'order_number_display'
= order_form.hidden_field :order_number, :value => @order_number
- order_form.fields_for :customer do |customer_form|
%p
= customer_form.label :first_name
%br
= customer_form.text_field :first_name
%p
= customer_form.label :last_name
%br
= customer_form.text_field :last_name
%p
= customer_form.label :phone
%br
= customer_form.text_field :phone
%p
= customer_form.label :email
%br
= customer_form.text_field :email
%p= order_form.submit 'Create Order'
= link_to 'Back', orders_path