Rails - 将self字段设置为关联记录字段的值

时间:2016-11-03 18:13:35

标签: ruby-on-rails

可能这很容易让我无法想象:-)但这些例子会引发错误

我试图将实例属性的值设置为等于关联记录的属性值。

案例1 - 对于注释模型,业务合作伙伴具有belongs_to关系(sender_id),我想分配业务伙伴的字段language的值到Annotation的字段locale_language,其中business_partner_id等于Annotation的sender_id,我尝试了这个:

def set_field_values
  self.locale_language = BusinessPartner.language.where(business_partner_id => self.sender_id) unless self.locale_language.present?
end

案例2 涉及3个模型:Document,Documentttype和Annotation。我想将documenttype_id Annotation的值分配给documenttype_id的{​​{1}}字段。注释的范围是活动的。

Document

怎么做?

更新

对于案例1,错误是NoMethodError。

  

AnnotationsController中的NoMethodError #create   未定义的方法`语言'对于#

案例2的

  

DocumentsController中的NoMethodError#创建未定义的方法   `documenttype_id'对于#

2 个答案:

答案 0 :(得分:0)

如果出现第一个错误,请尝试:

self.locale_language = Language.where(business_partner_id: self.sender_id) unless self.locale_language.present?

假设business_partner_id与语言模型

相关联

答案 1 :(得分:0)

为此,我能够使用一种方法来实现它,首先我查找相关记录,然后使用.select或.take来获取字段或记录。例如:

self.documenttype ||= Documenttype.active.default.take

假设默认值仅对1条记录为真 - 可通过以下方式实现:

validates_uniqueness_of :default, if: :default?, message: "Another document type is set as default"

它可以这样工作......

self.language = BusinessPartner.where(:business_partner_id => self.sender_id).select("language") unless self.language.present?