在创建控制器和模型之后,创建Ruby on Rails的视图(仅限视图)。
当我们使用Rails生成器创建一个scaffold时,我们可能会遇到一个问题:在创建控制器和模型之后,我们如何创建视图。
问题的原因是Rails生成器默认不会自动创建视图。我们需要显式指定要使用的字段。例如,我们可以使用以下命令创建一个名为User的scaffold,并指定要包含的字段:
rails g erb:scaffold User firstname lastname reputation
解决方法是使用rails g erb:scaffold
命令来创建视图。这个命令使用了erb作为模板引擎,当然你也可以使用其他的模板引擎,比如haml。通过这个命令,我们可以在控制器和模型已经创建的情况下仅生成视图。
另外,我们还可以使用rails g --help
命令查看生成器的选项,比如跳过、强制覆盖以及模拟运行等。如果我们需要特定于生成scaffold的信息,可以使用generate scaffold --help
命令。
,解决这个问题的方法是使用rails g erb:scaffold
命令来创建视图,并显式指定要使用的字段。
问题原因:在创建Ruby on Rails的视图之前,控制器和模型已经被创建了。
解决方法:
1. 首先,将views/your_model文件夹重命名为views/your_model_bak,以便于以后恢复。
2. 然后,执行以下命令:
rails g scaffold YourModel [field[:type][:index]] --skip
- 不要忘记使用--skip选项,这样就不会创建已存在的文件(在这种情况下是控制器和模型以及其他几个文件)。
- 确保[field[:type][:index]]列表是最新的。
3. 最后,你需要在your_model控制器中更新你的permit方法。
希望这能帮到你。
问题的出现原因:
在使用rails g scaffold User --migration=false --skip
命令生成User模型的视图时,发现控制器和模型已经创建好了,但是视图却没有生成。
解决方法:
在生成视图之前,需要先确保控制器和模型已经创建好了。可以通过使用--skip
参数来跳过已经存在的文件,--force
参数则相反,会覆盖已存在的文件。
示例输出:
在删除了User视图之后的输出结果如下:
invoke active_record identical app/models/user.rb invoke test_unit identical test/unit/user_test.rb skip test/fixtures/users.yml route resources :users invoke scaffold_controller identical app/controllers/users_controller.rb invoke erb exist app/views/users create app/views/users/index.html.erb create app/views/users/edit.html.erb create app/views/users/show.html.erb create app/views/users/new.html.erb create app/views/users/_form.html.erb invoke test_unit identical test/functional/users_controller_test.rb invoke helper identical app/helpers/users_helper.rb invoke test_unit identical test/unit/helpers/users_helper_test.rb invoke assets invoke coffee identical app/assets/javascripts/users.js.coffee invoke scss identical app/assets/stylesheets/users.css.scss invoke scss identical app/assets/stylesheets/scaffolds.css.scss
注意:如果希望生成的视图包含属性,需要在模型之后包含它们,例如:User name:string email:string
。
--migration=false
的作用是什么?
...不生成迁移文件。
这并不能真正解决问题。下面Rick Smith的答案是正确的。
事实证明,Rails在原始答案和2015年的新答案之间进行了四年的更改。