Rails 3 find_or_create_by

Я слежу за http://railscasts.com/episodes/102-auto-complete-association

Все вроде нормально. Я пытаюсь создать счет-фактуру, а также клиента на лету. Это работает. Все круто.

клиент принадлежит_к_счету счет-фактура принадлежит_счету invoice belongs_to client

Но у обеих моделей (Client и Invoice) есть обязательный атрибут: account_id.

Когда я пытаюсь создать нового клиента на лету, я получаю ошибку :client_id: - can't be blank

Причина, по которой я получаю эту ошибку, заключается в том, что клиент не может быть создан, потому что для этого требуется account_id в модели Client. Если я удалю эту строку validates :account_id, :presence => true в модели Client, то счет будет добавлен, но у клиента нет account_id.

У меня есть это в clients_controller.rb в действии create для установки значения по умолчанию @client.account_id = current_user.account_id

invoice.rb

validates :account_id, :presence => true
validates :client_id, :presence => true

def client_name
  client.name if client
end

def client_name=(name)
  self.client = Client.find_or_create_by_name(name) unless name.blank?
end

5
задан leonel 5 October 2011 в 18:34
поделиться