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的问题,但没有优势,这似乎是不必要的危险是的,这是我在之前的评论中所说的。在进行迁移之前,我们可以检查它是否存在。在注释更新之前,我们已经开始写了。编辑。