在轨道上的ruby中为我的表添加了一个列,它没有显示在脚手架中(新/编辑屏幕) - 为什么?

时间:2014-06-04 01:05:27

标签: ruby-on-rails

我是ruby on rails的新手,我有一个以前创建过的脚手架。

脚手架(让我们称之为#34; pet")有一些原始字段("宠物名称","宠物类型") 我添加了一个新专栏(让我们称之为"宠物颜色")

我通过" rails生成了迁移AddPetColorToPets pet_color:string:200" 然后是" rake db:migrate",然后" rails s"

现在,我认为这会自动更新" pet / new"和"宠物/编辑"页面添加这些变量。但它没有。

所以......我猜我在问 - 它应该有吗?如果没有,那么我需要做些什么才能转换我的页面?

感谢

2 个答案:

答案 0 :(得分:2)

不,它不必更新之前创建的视图,因此,您必须更新html,控制器以及可能使用新字段/属性的模型

答案 1 :(得分:0)

通过创建或删除数据库表中的任何字段或创建并运行新迁移来修改模型不会为您更新视图或控制器。 您必须通过在视图中添加新属性来自行手动进行修改。

现在,根据您的配置,它可以像以下一样简单:

rails destroy scaffold_controller ModelName

这将删除与ModelName关联的所有视图和控制器。

在您的情况下,您将运行命令:

rails destroy scaffold_controller Pet

(这将删除与Pet模型关联的所有视图和控制器。)

正如您所看到的,这也将 删除您在这些视图和控制器中可能包含的任何代码

请自行承担使用此费用。

现在,要使用新字段重新创建控制器和视图,请运行:

rails g scaffold_controller Model attribute1 attribute2 attribute3

这将使用三个提供的属性生成所有视图,例如

rails g scaffold_controller Pet pet_name pet_type pet_color

这将重新创建具有pet_color属性的视图。

请记住在模型名称后面提供属性,否则创建的视图将不会引用任何属性。这是因为当您使用scaffold_controller时,您告诉Rails不要使用模型,因此,您必须手动提供属性。

有关rails generaterails destroy命令的详细信息,请分别执行rails generate -hrails destroy -h

有关Rails命令行的更多信息,请参阅The Rails Command Line上提供的指南

如果这种方法不可接受(您已经在视图中编写了大量代码等),则必须手动进入并相应地更新视图。

您还可以查看备份现有视图和控制器,一旦您如上所述销毁并重新生成视图和控制器,您就可以复制粘贴相关代码。