Ruby on rails 3 为什么迁移不更新模型?

Ruby on rails 3 为什么迁移不更新模型?,ruby-on-rails-3,Ruby On Rails 3,我是rails新手,试图理解迁移和模型之间的关系。据我所知,迁移似乎只影响数据存储,因此在我使用脚手架创建资源之后,我是否负责保持模型和迁移的同步?在这方面有什么工具可以帮助吗 很抱歉,如果这是一个明显的问题,我仍在处理文档。所有迁移所做的都是修改数据库。Rails负责维护模型和数据库之间的同步 您可以有一个User表,该表具有id,firs\u name,您的类模型可能如下所示 class User < ActiveRecord::Base end 它将知道如何处理它 迁移只是允许您在

我是rails新手,试图理解迁移和模型之间的关系。据我所知,迁移似乎只影响数据存储,因此在我使用脚手架创建资源之后,我是否负责保持模型和迁移的同步?在这方面有什么工具可以帮助吗


很抱歉,如果这是一个明显的问题,我仍在处理文档。

所有迁移所做的都是修改数据库。Rails负责维护模型和数据库之间的同步

您可以有一个
User
表,该表具有
id
firs\u name
,您的类模型可能如下所示

class User < ActiveRecord::Base
end
它将知道如何处理它

迁移只是允许您在增量步骤中修改数据库的文件,同时保持数据库架构的正常版本控制

当然,如果您试图从模型中调用数据库或
ActiveRecord::Base
父类中不存在的东西,Rails会抱怨

@user = User.new
@user.awesome
#=> undefined method `awesome` for #<User:some_object_id>
@user=user.new
@用户:太棒了
#=>未定义的方法“awesome”#

至于迁移,您可以有影响一个表的多个迁移。您的工作只是知道您添加到模型中的属性。Rails将为您完成其余的工作。

所有迁移所做的都是修改数据库。Rails负责维护模型和数据库之间的同步

您可以有一个
User
表,该表具有
id
firs\u name
,您的类模型可能如下所示

class User < ActiveRecord::Base
end
它将知道如何处理它

迁移只是允许您在增量步骤中修改数据库的文件,同时保持数据库架构的正常版本控制

当然,如果您试图从模型中调用数据库或
ActiveRecord::Base
父类中不存在的东西,Rails会抱怨

@user = User.new
@user.awesome
#=> undefined method `awesome` for #<User:some_object_id>
@user=user.new
@用户:太棒了
#=>未定义的方法“awesome”#

至于迁移,您可以有影响一个表的多个迁移。您的工作只是知道您添加到模型中的属性。Rails将为您完成其余的工作。

一般的经验法则是迁移最适合数据定义—表中的列、它们的类型、约束等。因此,不需要将迁移与数据保持同步


如果从长远来看,您的数据定义本身发生了更改(新列或列类型中的更改),则只需添加一个指定相同的新迁移。

一般经验法则是,迁移最适合数据定义—表中的列、它们的类型、约束等。因此,您不需要将迁移与数据保持同步


如果从长远来看,数据定义本身发生了更改(新列或列类型中的更改),则只需添加一个新的迁移,并指定相同的迁移。

ActiveRecord模型通常是从数据库驱动的。数据库中定义的任何字段(通常)将自动显示为绑定到该表的activerecord模型中的属性

改变模型不会改变模式(通常)。要更改模型,通常需要定义迁移并将其运行到数据库中


请注意,没有什么可以阻止您使用attr_accessor等在模型上定义其他属性,但是如果架构中没有绑定这些属性的列,则ActiveRecord不会持久化这些属性。

ActiveRecord模型通常是从数据库驱动的。数据库中定义的任何字段(通常)将自动显示为绑定到该表的activerecord模型中的属性

改变模型不会改变模式(通常)。要更改模型,通常需要定义迁移并将其运行到数据库中


请注意,没有什么可以阻止您使用attr_accessor等在模型上定义附加属性,但是,如果架构中没有列将它们绑定到,则ActiveRecord不会保留这些内容。

我接受了Leo的答案,因为他帮助我更好地理解了事情,如果我刚刚进入迁移页面的底部,我可能不需要问:


提到的annotate_models gem听起来也很有用,可以帮助提高对类模型当前结构的认识,而不必参考模式。

我接受了Leo的答案,因为他帮助我更好地理解了事情,如果我刚刚进入迁移页面的底部,我可能不需要问:


提到的annotate_models gem听起来也很有用,可以帮助提高对类模型当前结构的了解,而不必参考模式。

如果要还原attr_访问器行为,而不是给出白名单或黑名单,可以使用以下方法针对每个模型执行:

attr_accesible *atribute_names - %(attributes black list)

如果要还原attr_访问器行为,而不是给出白名单或黑名单,则可以使用以下方法按型号执行:

attr_accesible *atribute_names - %(attributes black list)

您所说的同步模型和迁移是什么意思?您应该添加一个新的迁移,并开始在您的模型上使用新属性,而不是继续编辑现有的迁移(好吧,您有时可以,但好吧…)。我的困惑部分源于这样一个事实,即使用脚手架生成资源会添加模型可访问的属性。我很惊讶,创建迁移以添加新字段并没有更新模型。…
attr_accessible
是批量分配白名单。想象一下,当您向模式中添加类似于
admin
的内容时,Rails是否会自动为您更新此内容!我必须离开去看看什么是集体作业。我明白问题所在。虽然我知道脚手架会生成很多样板代码,但事实上它添加了attr_accessible,然后是“糟糕的做法”?你所说的同步建模和迁移是什么意思?您应该添加一个新的迁移,并开始在模型上使用新属性,n