我有一个定义的模型:
create_table "invoices", force: :cascade do |t|
t.string "organization"
...
end
现在业务规则发生了变化,我需要一个'组织'要在其位置链接的对象。
我已经有了一个组织模型。我可以轻松添加' organization_id'属于发票模型并声明关联。
更新模型后,我恐怕无法再达到'组织'的字符串价值。因为'组织'属性将被关联魔法方法掩盖?
那么,如何定义一个迁移步骤来将当前发票表更新为find_or_create_by(name:xxx>),其中xxx是组织列中的当前字符串?
答案 0 :(得分:1)
拥有organization_id
的重点在于您将从Organization
模型中调用关联数据...所以我会从中获取name
/其他数据如果是我:
#app/models/invoice.rb
class Invoice < ActiveRecord::Base
belongs_to :organization
alias_attribute :name, :location, to: :organization, prefix: true #-> organization_name
end
这样您就可以在organization_id
表格中加入invoices
,然后就可以调用关联数据了:
@invoice = Invoice.find params[:id]
@invoice.organization_name #-> "Name"
如果您想在invoices
表中保留组织字段,则必须重命名该关联:
#app/models/invoice.rb
class Invoice < ActiveRecord::Base
belongs_to :partner, class_name: "Organization", foreign_key: :organization_id
end
答案 1 :(得分:1)
您始终可以使用:read_attribute
方法为您的发票模型。如果要获取属性值:
@invoice.read_attribute(:organization)