2012-08-10 2 views
2

У меня есть две модели, связанные друг с другом, и я пытаюсь сделать after_save, создать в модели и код следующим образом.after_save ошибка в ruby ​​on rails

class CustomerBill < ActiveRecord::Base 
    after_save :updating_and_creating_ledger_items 
    has_many :customer_ledgers, :dependent => :destroy 

    def updating_and_creating_ledger_items 
    CustomerLedger.create(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id) 
    end 
end 

книга клиента модель

class CustomerLedger < ActiveRecord::Base 
    belongs_to :customer_bill, :foreign_key => "customer_bill_id" 
end 

Теперь проблема программа выполняет отлично, но значение не занесенные в базу данных. Если я проверяю регистр клиентов, он по-прежнему пуст.

Значения не сохраняются. В чем проблема? Руководство по этому вопросу будет полезно.

Заранее спасибо. :)

+0

попробуйте изменить создать для создания! и дайте мне знать, что произойдет –

+0

, когда я создал! форма не была сохранена, и она отправилась на редактирование, и я получил ошибку, которую я представил как не смог найти ** CustomerBill с id = 30 ** – bharath

+0

теперь я добавил: customer_bill_id => self.id и форма не получается сохранен .. !! – bharath

ответ

0

CustomerLedger может терпеть неудачу проверки достоверности. Заменить:

def updating_and_creating_ledger_items 
    CustomerLedger.create(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id) 
end 

с:

def updating_and_creating_ledger_items 
    ledger = customer_ledgers.build(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id) 
    ledger.save(:validate => false) 
end 
+0

Спасибо, Майк ... Мне не хватало ложной опции проверки ... поэтому я получал проблему ...теперь он работает нормально. :) – bharath

0

Вы не устанавливая customer_bill_id в create, изменить create к build, как так:

customer_ledger.build(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id) 
+0

Я получил следующую ошибку ** неопределенный метод 'build 'для # ** – bharath

2

Добавить

validates_associated :customer_ledgers 

В customer_bill.rb

Попробуйте

ledger = customer_ledgers.build(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id) 
ledger.save 

EDITED для избежать Validations, используйте

ledger = customer_ledgers.build(:date => self.date, :customer_id => self.customer_id, :user_id => self.user_id) 
ledger.save(:validate => false) 
+0

ну, я попробовал это. код выполняется правильно, но таблица таблицы не пуста .. :(:(Не получается, что кажется проблемой. – bharath

+0

Просто интересно, Почему вы храните 'date, customer_id, user_id' в' CustomerLedger' Когда вы уже сохраняя его в 'CustomerBill', и у вас есть Ассоциация между этими двумя? – Salil

+0

на самом деле это был сложный код, где я вычислял и сохранял общую сумму счета и сумму и прочее ... но чтобы определить проблему, я убрал код. . и оставил его только с одной строкой опции создания, а ассоциация была сделана в бухгалтерском учете, и счет имеет много регистров, и теперь я добавил связанные подтверждения. – bharath

Смежные вопросы