Ruby on rails 修改第一代后的设计模块
我正在学习rails。我发现Desive非常适合快速无缝地启动和运行身份验证,但我有一个问题 在第一次运行Desive generator(例如rails g Desive User)后,如何更改模块?默认情况下,进行以下迁移: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
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