2015-03-20 6 views
0

У меня есть таблица под названием Application и другую таблица с именем Application_Case_StatusОбновление столбца другой таблицы из другой модели таблицы рельсов

в моем коде, я создаю приложение и я хочу, чтобы обновить application_case_status столбец таблицы «приложение-источник» ,

При создании приложения, один из колонны: case_code = "OF-123" или "ON-123"

В моей Application_case_Status таблице, я Нч столбец :loan_application_id and :application_source

Мой код в приложении .rb

after_create :generate_source_id 

def generate_source_id 

    application_object = Application.find(self.id) 

    if application_object.case_code.include? "OF-" 
     update_attribute(:application_source, "Manual Upload") 
    end 
    if self.case_code.include? "ON-" 
     update_attribute(:application_source, "Website") 
    end 
    end 

я получаю ошибку, что не может найти столбец: application_source, как я могу получить его, чтобы обновить этот столбец, который Application_Case_Status таблицу

+0

Ваша таблица ApplicationCaseStatus, вероятно, имеет множество объектов, откуда вы знаете, какой из них вы хотите обновить? Есть ли связь между «Приложением» и «ApplicationCaseStatus»? – sebkkom

+0

отношение yes application_id является ссылкой в ​​ApplicationCaseStatus –

+0

Было бы полезно иметь больше информации. Пожалуйста, опубликуйте схему таблиц и точную ошибку, которая, вероятно, будет включать в себя «ActiveRecord :: ... – Elvn

ответ

0

Как и в вашем коде, кажется, что он пытается обновить столбец таблицы Application, но таблица приложения не имеет столбца с именем «application_source».

Вам необходимо обновить таблицу Application_case_Status

0

Прежде всего: Вам не нужно, потому что application_object = Application.find(self.id)self является application_object уже.

Кроме того, у вас есть два оператора if, но похоже, что они не могут одновременно быть истинными, поэтому вы должны преобразовать их в один if...else.

Таким образом, если предположить:

class Application 
    has_one :application_case_status 
end 

class ApplicationCaseStatus 
    belongs_to :application 
end 

Ваш метод должен выглядеть следующим образом:

def generate_source_id 
    # we are going to check "case_code" **once** and feed the "application_source" variable 
    application_source = 
    if self.case_code.include? "OF-" 
     "Manual Upload" 
    else 
     "Website" 
    end 
    # and then we are going to create the "ApplicationCaseStatus" entity 
    ApplicationCaseStatus.create!(:application_id = self.id, :application_source, application_source) 
end 

Обратите внимание, согласно замечанию @Tien Нгуен, что мы создание в ApplicationCaseStatus сущность, потому что мы имеем предположил, что он еще не создан. Если это не так, вам следует просто его обновить (self.application_case_status.update_attribute!(:application_source, application_source))

Сообщите мне, если что-то не работает так, как вы этого хотите или не имеет смысла.

+0

, я считаю правильным предположить, что на момент создания приложения нет ApplicationCaseStatus. Поэтому я предлагаю создавать, а не обновлять объект –

+0

@TienNguyen Это хорошее предположение, я собираюсь отредактировать свой ответ, чтобы включить ваше замечание. – sebkkom

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