Ruby on rails 修改第一代后的设计模块

Ruby on rails 修改第一代后的设计模块,ruby-on-rails,ruby-on-rails-3,migration,devise,Ruby On Rails,Ruby On Rails 3,Migration,Devise,我正在学习rails。我发现Desive非常适合快速无缝地启动和运行身份验证,但我有一个问题 在第一次运行Desive generator(例如rails g Desive User)后,如何更改模块?默认情况下,进行以下迁移: def self.up create_table(:users) do |t| t.database_authenticatable :null => false t.recoverable t.rememberable t.t

我正在学习rails。我发现Desive非常适合快速无缝地启动和运行身份验证,但我有一个问题

在第一次运行Desive generator(例如rails g Desive User)后,如何更改模块?默认情况下,进行以下迁移:

def self.up
  create_table(:users) do |t|
    t.database_authenticatable :null => false
    t.recoverable
    t.rememberable
    t.trackable

    # t.confirmable
    # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
    # t.token_authenticatable

    t.timestamps
  end

  add_index :users, :email,                :unique => true
  add_index :users, :reset_password_token, :unique => true
  # add_index :users, :confirmation_token,   :unique => true
  # add_index :users, :unlock_token,         :unique => true
end
如果我已经运行了此迁移,那么在以后的阶段如何添加/删除其中一些模块?例如,可能我想将lockable添加到现有的用户模型中。我知道如何在模型和design.rb中进行更改,但我不确定如何处理迁移

抱歉,如果答案已经在这里了,我已经在这里和谷歌搜索了几个小时,没有找到任何东西。也许我找错东西了

提前谢谢
杰森
另外,我正在使用
rails 3.0.0

设计1.1.3更改迁移文件中所需的行,然后按照以下说明重新进行迁移:


只要您只是删除已将适当字段添加到模式中的选项(如confirmable),您就可以直接编辑用户模型,而无需进行新的迁移。

我一直在寻找同一问题的答案,幸运的是,碰巧坐在知道如何操作的人旁边

下面是通过迁移脚本更新用户模型以包括可确认模块的示例(使用rails generate migration将可确认添加到用户的框架脚本文件):

class AddConfirmableToUsertrue
结束
def自动关闭
删除列:用户,:可确认
删除索引:用户,:确认\u令牌
结束
结束

我遇到了以下错误:

undefined local variable or method `confirmed_at' for #<User:0x000001041531c8> (NameError)
编辑迁移:

$ rails generate migration add_confirmable_to_users
class AddConfirmableToUsers < ActiveRecord::Migration
  def change
    add_column :users, :confirmation_token, :string
    add_column :users, :confirmed_at, :datetime
    add_column :users, :confirmation_sent_at, :datetime
    add_column :users, :unconfirmed_email, :string
  end
end
class AddConfirmableToUsers


你好,恰克。谢谢你的提示。我要试一试。如果在用于Desive的迁移之后还有其他迁移,那么这种方法是否健康?是的。Rails非常聪明,可以根据时间戳和内部跟踪,按照添加的顺序应用所需的迁移。在从头开始开发和重新应用所有迁移时,这可能会起作用,但修改旧迁移文件在生产环境中不起作用,如果系统已处于后一种迁移状态,则重新应用迁移将导致数据丢失。正确的方法是按照Prakash Murthy的回答添加一个新的迁移文件。谢谢Joost。我还对添加项目感兴趣,例如,t.lockable不仅仅是一个名为lockable的字段。我认为这样的自定义类型不能完全从rails命令行执行,因此您可以运行“rails生成迁移AddLockableToUsers”,然后手动编辑它生成的db/migrate文件夹中的文件并添加t.confirmable。然后运行“rakedb:migrate”并添加您的字段。谢谢Prakash。下次我需要的时候,我会试试看:)
class AddConfirmableToUsers < ActiveRecord::Migration
  def change
    add_column :users, :confirmation_token, :string
    add_column :users, :confirmed_at, :datetime
    add_column :users, :confirmation_sent_at, :datetime
    add_column :users, :unconfirmed_email, :string
  end
end