Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 删除迁移并添加另一个具有类似统计信息的迁移_Ruby On Rails_Ruby_Sqlite_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 删除迁移并添加另一个具有类似统计信息的迁移

Ruby on rails 删除迁移并添加另一个具有类似统计信息的迁移,ruby-on-rails,ruby,sqlite,ruby-on-rails-4,Ruby On Rails,Ruby,Sqlite,Ruby On Rails 4,我有一个叫做“sign_基板”的迁移,看起来像: class CreateJoinTableSignSubstrate < ActiveRecord::Migration def change create_join_table :signs, :substrates do |t| # t.index [:sign_id, :substrate_id] # t.index [:substrate_id, :sign_id] end end e

我有一个叫做“sign_基板”的迁移,看起来像:

class CreateJoinTableSignSubstrate < ActiveRecord::Migration
  def change
    create_join_table :signs, :substrates do |t|
      # t.index [:sign_id, :substrate_id]
      # t.index [:substrate_id, :sign_id]
    end
  end
end
class CreateJoinTableSignSubscriber
我想删除它,并添加类似的一个,而不是她(下面列出的一个):

class CreateJointTableCategorySubstrate
我所做的是,使用命令
rails d migration createjointablesignsubstance
,我认为(或者说它做了)它什么也没做,因为当我重新启动SQLite管理器时,表仍然在那里,所以我使用并手动从文件系统中删除了我(在文件中迁移时右键单击delete)

创建此迁移之后,我所做的是,我转到模型,手动修改了一些模型(我不确定是否可以这样做),并在模型中添加了几个新关联。(如有许多等)

运行rakedb:migrate

我的问题是:

  • 删除一次迁移并将其从数据库中删除的正确方法是什么

  • 我向模型添加新关联的方法是好的,还是我犯了一些错误


  • 您错过的步骤是首先回滚迁移。在删除上次迁移并添加新迁移之前,应使用
    rake db:rollback
    撤消上次迁移。

    可以生成迁移以删除列或删除表,方法与生成列或表的方法相同。发件人:

    产生

    class RemovePartNumberFromProducts < ActiveRecord::Migration
      def change
        remove_column :products, :part_number, :string
      end
    end
    

    对于您的关联,您可以指定模型中的关联,但关联只能通过引用外部ID或联接表等来实现。对于这些关联,您将拥有来生成合适的迁移;因此,关联是迁移+模型的团队工作。仅在模型中指定关联实际上不会将它们关联起来,除非它们的引用键存在。

    是的,但我不想破坏模型,我只想编辑它。@Michael如果要删除迁移,请使用
    rake db:rollback
    如果它是最后一次迁移本身;否则,请使用我上面提到的
    RemoveXXXfromYYY
    应用反向迁移。aaaaahahaaaaaaaaaa,所以如果我理解正确,首先删除特定的迁移(rails d migration CreateJointableSignSubstance(在我的例子中))然后创建我想要的新迁移。我还删除了与我删除的迁移相关联的模型,并创建了一个具有我想要的关联的新模型。所有这些我都是从终端完成的,而不是手动完成的。我遗漏了什么吗?部分是的。如果要删除的迁移是旧的,
    destroy
    。你不需要删除你的模型,你只需要编辑它们以满足你的需要(和关联),然后生成合适的迁移。是的,但是编辑模型是从编辑器中进行的,还是必须再次生成?
    rails generate migration RemovePartNumberFromProducts part_number:string
    
    class RemovePartNumberFromProducts < ActiveRecord::Migration
      def change
        remove_column :products, :part_number, :string
      end
    end
    
    rails destroy model ModelName