Rails 3.1:无法在添加它的同一迁移中写入列

2024-01-07

我有一个可以正常运行的 add_column 迁移。然而,在运行它并启动控制台后,我会发现first_name和last_name列完全为空。我尝试使用save!相反,它具有相同的效果——没有报告错误。这是原文:

class UserAddFirstNameAndLastName < ActiveRecord::Migration
  def change
    # add column first name, last name string
    add_column :users, :first_name, :string
    add_column :users, :last_name, :string

    User.all.each do |u|
      u.first_name = 'first name'
      u.last_name = 'last name'
      u.save
    end
  end
end

我还认为这可能是一些类加载问题,所以我插入了这一行User强制用户类在循环之前重新加载。没有骰子。

当我把它分成两次迁移时,就达到了预期的效果。有人对此有解释吗?我发誓我什至在过去的迁移的同一个项目中完成了此操作。

其他说明:针对用户引擎进行设计,添加了新列attr_accessible在运行迁移之前在 User 类中。


在迁移运行之前,您正在某处加载 Users 类User对它自己的结构有点困惑。解决办法是调用reset_column_information http://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-reset_column_information添加您的列后:

重置有关列的所有缓存信息,这将导致它们在下一个请求时重新加载。

此方法最常见的使用模式可能是在迁移中,当创建表后您想用一些默认值填充它时

The 在迁移中使用模型 http://guides.rubyonrails.org/migrations.html#using-models-in-your-migrations的部分迁移指南 http://guides.rubyonrails.org/migrations.html也许也值得一看。

尝试回滚并使用如下迁移:

def change
  # add column first name, last name string
  add_column :users, :first_name, :string
  add_column :users, :last_name, :string

  User.reset_column_information

  User.all.each do |u|
    u.first_name = 'first name'
    u.last_name = 'last name'
    u.save
  end
end

我用这样的三个迁移检查了这一点:

# 1: Don't touch Model before the new columns.
def change
  add_column :models, :some_column, :string
  Model.all.each { |m| m.some_column = 'pancakes'; m.save }
end

# 2: Pull in Model before adding the new columns.
def change
  puts Model.all.count
  add_column :models, :some_column, :string
  Model.all.each { |m| m.some_column = 'pancakes'; m.save }
end

# 3: Pull in Model before adding the new columns but use reset_column_information
def change
  puts Model.all.count
  add_column :models, :some_column, :string
  Model.reset_column_information
  Model.all.each { |m| m.some_column = 'pancakes'; m.save }
end

第一个工作得很好,第二个增加了some_column但保留 NULL 值,第三个也可以。

我猜想您的应用程序初始化中的某些内容(可能来自 Devise)导致加载用户及其架构,然后您添加一列。但是,显然,用户只部分了解新专栏u.first_name调用有效,但在 User 内部缓存了某些内容,以防止将属性写入数据库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 3.1:无法在添加它的同一迁移中写入列 的相关文章

  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • 没有 OAuth 的 Spring Security JWT

    最近我开始学习如何使用oauth 2 0 jwt配置spring boot 我有一个问题 是否可以使用spring boot security jwt避免oauth 2 0 是的 可以使用JWT无需使用标准化的功能OAuth 2 0 flo
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • Typescript 函数接口重载

    我有以下代码 interface MySecondInterface a type A interface MyInterface val1 string val2 string MySecondInterface a
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 带显示块的SPAN

    和默认有什么区别 div 元素和默认值 span 元素与display block HTML 元素的有效性和语义存在差异 否则它们是相同的 div and span两者都被定义为通用容器 在 HTML 方面没有更深层次的含义 一个默认为块显
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • 使用泛型全面实现特征

    我正在通过实现矩阵数学来练习 Rust 但遇到了一些障碍 我定义了我认为与矩阵相关的特征 trait Matrix
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐

  • 为什么这些是==而不是`equals()`?

    我对Java的处理方式有点困惑 and equals 到那个时刻int Integer和其他类型的数字 例如 Integer X 9000 int x 9000 Short Y 9000 short y 9000 List
  • mysql 连接错误“字典中不存在给定的键”

    我在使用 ADO NET Driver for MySQL Connector NET 连接到 mysql 数据库时遇到问题 我得到了这个异常The given key was not present in the dictionary E
  • 搜索实现特定接口并执行方法的类

    我想调用实现某些特定接口的类中的方法 我已经尝试和搜索了很多 但不知道该怎么做 这是我的想法 但它不起作用 希望可以有人帮帮我 getting the list List
  • Java String 的默认初始值是多少?

    考虑一个名为的 Java 字符串字段x 的初始值是多少x当为类 x 创建对象时 我知道对于int变量 默认值指定为0 在创建实例时 但会变成什么String 如果您不执行任何操作 它会初始化为 null 所有引用类型也是如此
  • android在对话框中加载webview [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 webview 中打开 twitter auth 而不是在浏览器中打开 有什么好的教程如何在
  • 用 Beautiful Soup 解析 XML

    编辑 已解决 我想我应该在底部添加我的答案 注意 所需的输出是一堆像 US D0591026 我的 XML 数据如下所示
  • 比较两个 C 风格字符串的正确函数是什么?

    所以我陷入了两难的境地 我需要比较两个 C 风格的字符串 并搜索了最合适的函数 memcmp Compare two blocks of memory function strcmp Compare two strings function
  • 使用免费的第三方 dll 将 word 转换为 pdf

    我想将word文档转换为pdf 我找到了很多使用 Office dll 的解决方案 但我想要一个使用免费第三方dll的解决方案 因为在office dll中必须安装office 所以我的服务器上没有安装office 有没有免费的第三方dll
  • 将组合变音符号转换为简单 utf

    由于某些编码问题 我在将字符串插入数据库时 遇到问题 字符串源是外部 rss 提要 在网络浏览器中看起来没问题 即使在调试器中 文本也看起来没问题 如果我将strong复制到记事本中 结果也可以 但在记事本 中可以看到字符串正在使用组合字符
  • 如何从 Android 调用 PHP 函数?

    我想调用服务器上的特定 php 函数并发送一些参数 到目前为止 我实现了可以使用 HttpClient 打开 php 文件并执行数据传输到 Json 并在我的应用程序中显示 那么 现在我希望能够调用特定函数并向其发送参数 我该怎么做 抱歉
  • Oracle 和分页

    在 MySql 中 分页的概念可以通过使用单个 SQL 语句轻松实现LIMIT子句类似于以下内容 SELECT country id country name FROM country c ORDER BY country id DESC
  • 无法使用 MongoEngine Pymongo 和 Django 返回 JSON 对象?

    所以我试图返回一个项目的 JSON 对象 我花了几个小时试图让 Django 返回 JSON 这是我们一直在研究的观点 def json request first name user User objects all user User
  • ASP.NET MVC AJAX 与 HTML.ValidationMessageFor

    我习惯使用 ASP NET Webforms 通过 UpdatePanels 执行 AJAX 的简单方法 我知道这个过程对于 MVC 来说更加手工 在特定情况下 我使用数据注释来验证某些表单输入 我使用 HTML ValidationMes
  • 如何全局更改Swing JTextFields的ActionMap?

    我想通过用我的自定义实现替换一些操作来更改整个应用程序中 Swing JTextFields 的 ActionMap 关于原因的解释可以参考以下帖子 如何使 JTextComponent 的插入符跳过选定的文本 https stackove
  • 如何在悬停时反转转换?

    我可以通过 CSS 反转悬停时的过渡动画吗 当我将鼠标悬停在 菜单 文本上时 我需要滑动到右侧蓝线 并在 400 毫秒延迟后从左侧灰线滑动 是否可以 menu display inline block position relative f
  • 是否有像 phpMyAdmin 这样的工具可以配置为仅访问单个数据库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有像 phpMyAdmin 这样的工具可以配置为仅访问服务器中的单个 MySQL 数据库 我无法使
  • Bootstrap Dropdown 在 React 中不起作用

    我从引导下拉列表中添加了一个用于 React 的下拉按钮 但它不起作用并显示为普通按钮 你能给我一个解决方案吗 div div
  • Ajax.BeginForm 指定“GET”类型发帖

    我的看法如下 Scripts jquery unobtrusive ajax js type text javascript gt Scripts jquery validate js type text javascript gt Scr
  • 我应该使用 DTO 作为 MVVM 中的数据模型吗?

    我目前正在研究我第一次真正尝试使用 MVVM 并且一直在阅读各种关于如何最好地实现它的文章 我当前的想法是有效地使用我的数据模型作为数据传输对象 使它们可序列化并让它们同时存在于客户端和服务器端 这似乎是一个合乎逻辑的步骤 因为这两种对象类
  • Rails 3.1:无法在添加它的同一迁移中写入列

    我有一个可以正常运行的 add column 迁移 然而 在运行它并启动控制台后 我会发现first name和last name列完全为空 我尝试使用save 相反 它具有相同的效果 没有报告错误 这是原文 class UserAddFi