Ruby on rails Rails默认为定义的值
您好,我想知道在中定义默认值的正确方法是什么Ruby on rails Rails默认为定义的值,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,您好,我想知道在中定义默认值的正确方法是什么 class SetDefault < ActiveRecord::Migration def change change_column :table_name, :column_name, :type, default: "Your value" end end class SetDefault
class SetDefault < ActiveRecord::Migration
def change
change_column :table_name, :column_name, :type, default: "Your value"
end
end
class SetDefault
但不是“你的价值”,而是存储在@settings模型中的@yourvalue
class SetDefault < ActiveRecord::Migration
def change
change_column :table_name, :column_name, :type, default: @settings.yourvalue
end
end
class CreateSettings < ActiveRecord::Migration[5.2]
def change
create_table
t.string :yourvalue
t.timestamps
end
end
end
class SetDefault
@yourvalue将由用户定义和更新迁移是正常的Ruby类。您可以在其中编写Rails代码。你可以访问你的模型
class SetDefault < ActiveRecord::Migration
def change
change_column :table_name, :column_name, :string, default: Setting.find(1).yourvalue
end
end
class SetDefault
替换
设置。用您需要筛选的任何逻辑查找(1)
。我会在模型上设置它,以便您的迁移不依赖于其中数据的以前状态
class TableName < ApplicationRecord
before_create :add_defaults
# whatever
private
def add_defaults
self.column_name = Setting.find(1).default_value unless column_name
end
end
class TableName
这样,您就不会从迁移中调用ActiveRecord,如果在添加
设置之前将其部署到某个位置并运行迁移,那么您的应用程序仍然可以工作。在添加任何数据之前,您可能需要一个完全迁移的数据库。该值的来源是什么?用户输入后,您将其存储在何处?我建议包含一个设置模型。。。这纯粹是假设的@settings
是AR模型行吗?我不知道你在说什么mean@JoeBloggs他是说,这似乎是一种危险的做法。删除和重新加载的DB的值是多少?我们可以包装设置。在进行更改之前,查找(1)
以检查记录是否存在。否则就执行不可操作的迁移,这是非常正确的,但是将其存储在迁移中与类相比有什么优势呢?我意识到这是OP的问题,但没有优势,这似乎是不必要的危险是的,这是我在之前的评论中所说的。在进行迁移之前,我们可以检查它是否存在。在注释更新之前,我们已经开始写了。编辑。