从另一个表模型rails更新另一个表的列

时间:2015-03-20 12:34:04

标签: mysql ruby-on-rails postgresql ruby-on-rails-4

我有一个名为Application的表和另一个名为Application_Case_Status的表

在我的代码中,我创建了应用程序,我想更新application_case_status表列" application-source"。

创建应用程序后,其中一列是:case_code =" OF-123"或" ON-123"

在我的Application_case_Status表中,我有一个列:loan_application_id and :application_source

我在application.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表

2 个答案:

答案 0 :(得分:0)

根据您的代码,它似乎尝试更新表Application的列但Application表没有名为" application_source"的列。

您需要更新表Application_case_Status

答案 1 :(得分: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 Nguyen的评论,我们创建一个ApplicationCaseStatus实体,因为我们假设它尚未创建。如果不是这种情况,您应该只更新它(self.application_case_status.update_attribute!(:application_source, application_source)

如果某些内容无法正常运行或没有意义,请告诉我。