我的数据库包含两个表,这些表是我用rails g migration
创建的。
一个表包含电视节目,其中有几列数据描述每个节目。一列称为:watchlist。我忘记将:watchlist的默认值设置为false,因为每个新节目的监视列表值都应该为false。在我的前端,我希望能够将此值从false切换为true(将程序添加到监视列表的操作会将值从false更改为true)。
我正在为后端使用Rails API,因此我咨询了documentation并尝试使用以下代码来更改change_column_default:
rails change_column_default :program, :watchlist, from: nil, to: false
但出现此错误:
Don't know how to build task 'change_column_default' (See the list of available tasks with `rails --tasks`)
我尝试了rails --tasks
,但是在生成的列表中没有看到我需要的内容。
搜索其他问题后,我发现了this one,但如果不需要的话,宁愿不在模型上执行此操作。
当前(不正确)迁移。 :watchlist
应该是t.boolean :watchlist, default: false
class CreatePrograms < ActiveRecord::Migration[6.0]
def change
create_table :programs do |t|
t.string :url
t.string :name
t.string :network
t.string :image
t.boolean :watchlist
t.timestamps
end
end
end
程序模型
class Program < ApplicationRecord
has_many :comments
validates :name, :network, presence: true
end
程序序列化器
class ProgramSerializer < ActiveModel::Serializer
attributes :id, :name, :network, :image, :watchlist
has_many :comments
end
答案 0 :(得分:1)
您应在迁移文件中使用change_column_default
方法。
生成迁移文件
rails g migration add_default_false_to_watchlist_for_programs
向迁移文件添加change_column_default
方法
class AddDefaultFalseToWatchlistForPrograms < ActiveRecord::Migration
def change
change_column_default :programs, :watchlist, from: nil, to: false
end
end
运行rails db:migrate
答案 1 :(得分:1)
这是因为change_column_default
不是瑞克任务
您需要生成迁移rails g migration add_default_value_to_watchlist_for_programs
,这将生成迁移文件。
然后,您需要添加一行,告诉活动记录在我们创建的迁移中设置默认值
change_column_default :programs, :watchlist, from: nil, to: false
rails db:migrate