【问题标题】:Rails migrate a column to an associationRails 将列迁移到关联
【发布时间】:2013-08-06 22:21:03
【问题描述】:

我有一个带有 postgres 数据库的 rails 应用程序。我从一个跟踪票可以访问的事件的 Rails 模型票开始,但是可以一次购买多张票。所以现在我有了这个:

Ticket
    belongs_to :purchase

Event
    belongs_to :purchase

Purchase
    has_many :tickets
    has_many :events

我想在门票没有购买的地方使用迁移,创建购买并将其ticket_id设置为门票,将其event_id设置为门票的event_id,将门票的event_id设置为nil,然后从票。

关于如何解决这个问题的想法?

【问题讨论】:

  • 这种类型的逻辑可以在您创建工单时进入您的控制器。
  • 好的,有道理,但是我该如何处理现有的票?
  • 您可以运行 rake(这几乎是一个脚本),它会更新您现有的票证以满足您所需的要求。当然,您必须编写此脚本。
  • 啊,那我可能想把方形钉子装进圆孔里。
  • 是的,如果您的表设置正确,您不再需要运行任何迁移。此时,主要是控制器逻辑(确保新票创建具有正确值的新购买)和运行 rake(修复从旧逻辑创建的旧票)。

标签: ruby-on-rails postgresql migration relationship


【解决方案1】:

这里是如何在 Rails 中生成 rake 任务:http://railsguides.net/2012/03/14/how-to-generate-rake-task/

您更新历史记录的 rake 任务应如下所示:

# lib/tasks/something.rake
desc "Update old stuff"
task :my_task1 => :environment do
  tickets = Ticket.where("purchase_id IS NULL")
  tickets.each do |ticket|
    ticket.purchase.create!([attributes])
    ...[more stuff]...
  end
end

在如下命令上运行 rake 任务:

$ bundle exec rake my_task1

我无法 100% 遵循您的应用程序的逻辑,但希望这会为您指明正确的方向。

【讨论】:

    猜你喜欢
    • 2015-10-05
    • 2011-11-04
    • 2014-02-24
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    相关资源
    最近更新 更多