我可以使用 Rails 迁移编辑数据库中的字段吗?

发布于 2024-11-15 17:15:02 字数 211 浏览 5 评论 0原文

我有一个链接数据库,所有链接都指向特定站点,但该站点上有不同的页面。那么该网站的域名已更改,我需要更新我的数据库以反映该更改。我只需要更改域名,其余链接就可以正常工作。

我的问题是,我可以使用 Rails 迁移来做到这一点吗?要编辑列中的所有字段并更新它们?这会是什么样子?

我知道还有其他方法可以解决这个问题,但我想探索 Rails 迁移的选项。

提前致谢!

I have a database of links that all point to a specific site, but different pages on that site. Well the site's domain changed and I need to update my database to reflect that change. I only need to change the domain name, the rest of the link works fine.

My question is, can I use a rails migration to do this? To edit all fields in a column and update them? What would this look like?

I know there are other ways to approach it, but I want to explore the options I would have with a rails migration.

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

楠木可依 2024-11-22 17:15:02

当然,你有两个选择。 1) 您可以在迁移中编写 ActiveRecord 代码,就像在模型中一样,例如:

class ChangeDomainName < ActiveRecord::Migration
  def self.up
    YourModel.update_all "url = REPLACE(url, 'www.old-domain-name.com', 'www.new-domain-name.com')"
  end

  def self.down
    # ...
  end
end

在这种情况下要记住的一件事是,如果您在 update_all 您需要在更改表之后、调用 ActiveRecord 方法之前执行 YourModel.reset_column_information

2) 您可以通过“execute”方法使用原始SQL:

def self.up
  execute "UPDATE your_models SET url = REPLACE(url, 'www.old-domain-name.com', 'www.new-domain-name.com)"
end

我个人更喜欢第一种方法。

Sure, you have two options. 1) You can write ActiveRecord code in migrations just like you would in a model, e.g.:

class ChangeDomainName < ActiveRecord::Migration
  def self.up
    YourModel.update_all "url = REPLACE(url, 'www.old-domain-name.com', 'www.new-domain-name.com')"
  end

  def self.down
    # ...
  end
end

One thing to remember in this scenario is that if you're changing e.g. column names or types in the same migration before update_all you need to do YourModel.reset_column_information after altering the table and before calling ActiveRecord methods on it.

2) You can use raw SQL with the "execute" method:

def self.up
  execute "UPDATE your_models SET url = REPLACE(url, 'www.old-domain-name.com', 'www.new-domain-name.com)"
end

Personally I prefer the first method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文