Создать или выбрать запись при использовании accepts_nested_attributes_for - PullRequest
1 голос
/ 24 февраля 2012

У меня есть следующее:

app/models/order.rb

class Order < ActiveRecord::Base
  belongs_to :client    
  accepts_nested_attributes_for :client
end

app/models/client.rb

class Client < ActiveRecord::Base
    has_many :orders
end

Когда Заказ сохраняетсяЯ бы хотел

  • Проверить, существует ли существующий Клиент с указанным адресом электронной почты
  • Если существует, выберите его для Заказ
  • Если нет, создайте клиента с предоставленным атрибутом и свяжите его с моим Заказом

Должен ли я использовать before_save для клиента или как лучше всего его достичь?

Спасибо, ребята!

======== решено!========

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Я бы использовал before_create для ордера, метод может выглядеть следующим образом:

class Order < ActiveRecord::Base
  before_create :determine_client
  ...
  def determine_client
    if Client.exists?(:email => self.email_variable)
      self.client_id = Client.find_by_email(self.email_variable)
    else
      cur_client = Client.create!({ :email => self.email_variable })
      self.client_id = cur_client.id
    end
  end
end

Это просто, но вы можете построить оттуда. Надеюсь, это поможет!

0 голосов
/ 25 февраля 2012

Благодаря Fishz Я поиграл и нашел следующее решение:

class Order < ActiveRecord::Base

    before_validation :check_client_existance

    def check_client_existance
       if client = Client.find_by_email(self.client.email)
          self.client = client
       end 
    end

end

Спасибо =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...