Ruby On Rails更改列为空,不起作用?
Ruby On Rails更改列为空,不起作用?
我在终端中使用命令来将数据库中的一列更改为非空,但似乎没有起作用。
rails g migration change_column_null :Speaker, :surname, false
我得到了一个名为ChangeColumnNull的文件,但里面什么也没有。
class ChangeColumnNull < ActiveRecord::Migration def change end end
讲座控制器(创建函数):
class CplecturesController < ApplicationController layout 'cp_layout' def create @lecture = Lecture.new(lecture_params) @lecture.save redirect_to @lecture end private def lecture_params params.require(:lecture).permit(:lecture_title, :lecture_day, :column, :start_time, :end_time, :registered_speakers, :guest_speakers, :description) end end
表单:
<%= form_for :lecture, url:lectures_path do |f| %>
问题出现的原因是:在Rails迁移中修改列设置为非空时,使用了错误的语法。
解决方法是:
1. 删除原有的迁移文件,并创建一个新的迁移文件。
2. 在新的迁移文件中,使用change_column方法来修改列设置为非空,并设置默认值。
3. 如果只关心用户输入的值是否为空,可以在模型中添加验证器来要求非空。
4. 确保重启服务器,并检查参数哈希和表单数据是否正确传递。
以下是详细步骤:
1. 使用以下命令删除原有的迁移文件:
rails destroy migration [原有迁移文件名称]
2. 创建一个新的迁移文件:
rails g migration ChangeColumnOnTableName
3. 打开新创建的迁移文件(文件名可能不同),在change方法中添加change_column代码,修改要更改的表、列和数据类型,并设置为非空:
class ChangeColumnOnTableName < ActiveRecord::Migration def change change_column :name_of_table, :name_of_column, :data_type_of_column, :null => false end end
4. 运行以下命令来执行迁移:
bundle exec rake db:migrate
5. 在模型中添加验证器来要求非空:
class TableName < ActiveRecord::Base validates :name_of_column, presence: true end
6. 重启服务器,并确保检查参数哈希和表单数据是否正确传递。
注意:在代码中,将“name_of_table”替换为要更改的表的名称,“name_of_column”替换为要更改的列的名称,“data_type_of_column”替换为列的数据类型。确保将代码的其余部分保持不变。
希望这些步骤能够解决你的问题。如果仍然遇到困难,请提供更多的代码和错误信息,以便我们能够更好地帮助你。