【发布时间】:2016-02-03 12:48:59
【问题描述】:
我的 Db 正在改变结构,我在 change 方法中使用列方法时遇到问题
这是我的模型:
Project(id: integer,
created_at: datetime,
updated_at: datetime,
creator_id: integer,
brand_id: integer,
order_id: integer,
real: boolean,
state: string,
finished_work_url: string)
Order(id: integer,
created_at: datetime,
updated_at: datetime,
brief_id: integer,
state: string,
delivered_at: datetime)
LegalOption(id: integer,
project_id: integer,
custom_document_file_name: string,
custom_document_content_type: string,
custom_document_file_size: integer,
custom_document_updated_at: datetime)
Proposal(id: integer,
created_at: datetime,
updated_at: datetime,
brief_id: integer,
creator_id: integer,
description: text,
price: float,
deposit_percentage: integer)
我将project_id 列更改为proposal_id,这是另一个模型。所以我想为每个LegalOption 检索我的project_id 并放置正确的proposal_id。
我尝试使用订单和项目之间的关联,但由于 Rails 约定,我遇到了错误The method .order() must contain arguments。
现在因为我的 2 个模型是同时创建的,所以我想使用方法 created_at 来获取与我的项目相对应的订单。但我有错误:
undefined method `created_at' for #<Project:...
我不明白为什么我不能使用这种方法。
这是我的迁移代码:
class ChangeDbStructureLegal < ActiveRecord::Migration
def change
old_db_structure_hash = {}
LegalOption.all.each do |legal_option|
old_db_structure_hash[:project_id] = legal_option.project_id
project = Project.where(id: old_db_structure_hash[:project_id])
Order.all.each do |o|
if o.created_at == project.created_at
proposal = Proposal.where(brief_id: o.brief.id, creator_id: project.creator.id)
old_db_structure_hash[:proposal_id] = proposal.id
end
end
rename_column :legal_options, :project_id, :proposal_id
legal_option.proposal_id = old_db_structure_hash[:proposal_id]
end
end
end
【问题讨论】:
标签: ruby-on-rails migration database-migration